Присоединение темы к себе
Я сомневаюсь, что происходит, когда нить соединяется. 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 ...");
}
}
Но почему? Должен ли я получить какую-либо ошибку?
Ответы
Ответ 1
Концепция нити, соединяющей себя, не имеет смысла.
Выходит, что метод join()
использует метод isAlive()
для
определить, когда вернуться из метода join()
. В текущей реализации он также
не проверяет, присоединяется ли поток.
Другими словами, метод join()
возвращается тогда и только тогда, когда поток больше не жив. Это будет иметь следствием
ожидание навсегда.
Ответ 2
Должен ли я получить какую-либо ошибку?
Я не ожидал бы ошибки. javadocs для Thread.join()
не говорят, что это ошибка, и вполне возможно, что какой-то сумасшедший человек может использовать это как еще один способ делая sleep
, поэтому недокументированная ошибка будет плохой идеей.
Я думаю, что Солнце не думало, что это был случай, на который стоит обратить особое внимание.