线程连接本身

Aik*_*ika 34 java multithreading join

我有疑问,当一个线程加入时会发生什么.即线程自己调用join方法.我没有收到任何错误.

样品:

public class JoinItself extends Thread {

    public void run() {
        System.out.println("Inside the run method ");
        System.out.println(Thread.currentThread().isAlive());
        for(int i=0;i<5;i++) {
            try {
                System.out.println("Joining itself ...");
                Thread.currentThread().join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {

        JoinItself j = new JoinItself();

        System.out.println(j.isAlive());
        j.start();
        System.out.println(j.isAlive());
        System.out.println("Thread started ...");

    }

}
Run Code Online (Sandbox Code Playgroud)

但为什么?我应该收到任何错误吗?

sgo*_*les 33

线程连接本身的概念没有意义.

事实上,该join()方法使用该isAlive()方法来确定何时从该join()方法返回.在当前实现中,它也不检查线程是否正在加入自身.
换句话说,该join()方法仅在线程不再存在时返回.这将具有永远等待的效果.

  • 值得注意的是你可以在`run()`之外调用`join()`,当`run()`完成时它会返回.在关机方法中有用. (5认同)