Подтвердить что ты не робот

Присоединение темы к себе

Я сомневаюсь, что происходит, когда нить соединяется. i.e поток вызывает метод 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 ...");

    }

}

Но почему? Должен ли я получить какую-либо ошибку?

4b9b3361

Ответ 1

Концепция нити, соединяющей себя, не имеет смысла.

Выходит, что метод join() использует метод isAlive() для определить, когда вернуться из метода join(). В текущей реализации он также не проверяет, присоединяется ли поток.
Другими словами, метод join() возвращается тогда и только тогда, когда поток больше не жив. Это будет иметь следствием ожидание навсегда.

Ответ 2

Должен ли я получить какую-либо ошибку?

Я не ожидал бы ошибки. javadocs для Thread.join() не говорят, что это ошибка, и вполне возможно, что какой-то сумасшедший человек может использовать это как еще один способ делая sleep, поэтому недокументированная ошибка будет плохой идеей.

Я думаю, что Солнце не думало, что это был случай, на который стоит обратить особое внимание.