我不确定问题到底是什么,但由于某种原因,我无法让两个类的线程同时运行。我可以从一个类中获取多个线程同时运行,但是当我尝试启动另一个类时没有任何反应。
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"显示,但第二个永远不会。 我错过了什么吗?
答案 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}}方法将被执行。