Нить включай на себя - PullRequest
33 голосов
/ 14 мая 2011

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

    }

}

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

Ответы [ 3 ]

33 голосов
/ 14 мая 2011

Понятие присоединяющейся нити не имеет смысла.

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

2 голосов
/ 14 мая 2011

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

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

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

0 голосов
/ 23 декабря 2018

Объединение ожидает уведомления от другого потока. В этом случае тот же поток ожидает своего уведомления, и, следовательно, уведомление не получено. Программа никогда не закончится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...