(Thread) A.join()
- 使当前线程等待线程A完成。
我认为从run方法调用this.join()
会导致线程死锁 - 它会等待自己完成。但是它不会发生 - 代码编译并运行得很好 - 没有死锁。当我拨打this.join()
时会发生什么?
答案 0 :(得分:4)
重新重新编辑此答案 你发现了差异吗? mary jane使用this.join()代替而不是
Thread.urrentThread()。join()就像你在Nathan那样。这意味着她创建了一个新的线程,它正在加入,但主线程完好无损。
@Nathan 我试过这个有效的
public class Main extends Thread{
@Override
public synchronized void run() {
// TODO Auto-generated method stub
super.run();
try {
this.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new Main().start();
System.out.println("hello");
}
}
答案 1 :(得分:1)
这不是我的例子。此代码加入当前线程,导致其死锁:
public class ThreadJoinTest
{
public static void main(String[] args) throws Exception
{
System.out.println("joining");
Thread.currentThread().join();
System.out.println("i'm back"); // we never get to this point
}
}
您可以尝试添加
System.out.println("current thread name=" + Thread.currentThread().getName() );
到您的代码中验证当前线程是否符合您的想法。