在java中加入线程

时间:2011-11-15 14:48:30

标签: java multithreading join

(Thread) A.join() - 使当前线程等待线程A完成。 我认为从run方法调用this.join()会导致线程死锁 - 它会等待自己完成。但是它不会发生 - 代码编译并运行得很好 - 没有死锁。当我拨打this.join()时会发生什么?

2 个答案:

答案 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() );

到您的代码中验证当前线程是否符合您的想法。