Java获取不同类的多个线程以同时运行

时间:2015-04-23 21:32:49

标签: java multithreading class

我不确定问题到底是什么,但由于某种原因,我无法让两个类的线程同时运行。我可以从一个类中获取多个线程同时运行,但是当我尝试启动另一个类时没有任何反应。

public professor(){
    prof = new Thread();
    prof.start();
    System.out.println("Prof has started1");
}

public void run(){
    try{
        System.out.println("Prof has started2");
        prof.sleep(600);
        //do more stuff
}
    catch(Exception e){
        System.out.println("Prof error");
    }

这就是我开始第二堂课的方式,第一堂课以完全相同的方式开始并且运行良好。然而,这个班级"教授已经开始1"显示,但第二个永远不会。 我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

我认为这就是原因

prof = new Thread();
prof.start();

此代码永远不会调用您自己的run()方法,如果您的类实现了runnable接口,您应该这样做

prof = new Thread(this)
prof.start()`

答案 1 :(得分:1)

你没有提供教授课程的全部教学,所以确切的解决方案可能会有所不同,但我看到的主要观点是:你创建一个Thread类的实例,然后调用{{1 }}:

.start()

唉,prof = new Thread(); prof.start() 类本身在你上面调用Thread时没有做任何事情。你需要告诉它你希望它在.start()编辑后执行的操作是什么。有几种方法可以这样做,但我会这样做:

start()

即:创建public professor() { prof = new Thread(new Runnable() { public void run() { try { System.out.println("Prof has started2"); Thread.currentThread().sleep(600); //do more stuff } catch(Exception e){ System.out.println("Prof error"); } } }); prof.start(); System.out.println("Prof has started1"); } public void run() { } 的实例,在其中覆盖Runnable,以便它可以执行您想要的任何操作。然后将此run()实例传递给您正在创建的Runnable对象的构造函数。当您随后调用Thread时,.start()的{​​{1}}方法将被执行。