线程连接本身

2022-09-01 06:57:35

我怀疑,当线程自己连接时会发生什么。即线程自己调用连接方法。我没有收到任何错误。

样本:

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 ...");

    }

}

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


答案 1

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

碰巧的是,该方法使用该方法来确定何时从该方法返回。在当前实现中,它也不会检查线程是否正在连接自身。
换句话说,该方法仅在线程不再处于活动状态时返回。这将产生永远等待的效果。join()isAlive()join()join()


答案 2

我应该得到任何错误吗?

我不希望出现错误。javadocs不会说这是一个错误,只是可以想象一些疯狂的人可能会用它作为另一种做的方式,所以一个未记录的错误将是一个坏主意。Thread.join()sleep

我猜孙中山并不认为这是一个值得特别关注的案例。