Что означает этот код присоединения к потоку?
Цитировать из Thread.join()
метода Javadocs :
join()
Ждет, когда эта нить умрет.
Существует поток, который выполняет ваш пример кода, который, вероятно, является основным потоком .
- Основной поток создает и запускает
t1
и t2
тему. Два потока начинают работать параллельно.
- Основной поток вызывает
t1.join()
ожидание завершения t1
потока.
- Поток
t1
завершается, и t1.join()
метод возвращается в основной поток. Обратите внимание, что t1
он уже мог закончиться до join()
того, как будет выполнен вызов, и в этом случае join()
вызов будет немедленно возвращен.
- Основной поток вызывает
t2.join()
ожидание завершения t2
потока.
- Поток
t2
завершается (или мог завершиться раньше, чем t1
поток), и t2.join()
метод возвращается в основной поток.
Важно понимать, что потоки t1
and t2
работали параллельно, но основному потоку, который их запустил, нужно дождаться их завершения, прежде чем он сможет продолжить. Это обычная модель. Кроме того, t1
и / или t2
мог завершиться до того, как основной поток вызовет join()
их. Если это так, то join()
не будет ждать, но вернется немедленно.
t1.join()
означает, что t2 останавливается до тех пор, пока не закончится t1?
Нет. Основной вызывающий поток t1.join()
прекратит работу и будет ждать t1
его завершения. Поток t2
работает параллельно и не подвержен влиянию t1
илиt1.join()
вызову вообще.
С точки зрения try / catch, join()
throws InterruptedException
означает, что основной поток, который вызывает, join()
может сам быть прерван другим потоком.
while (true) {
Наличие соединений в while
цикле - странная картина. Как правило, вы выполняете первое соединение, а затем второе соединение, обрабатывая InterruptedException
соответственно в каждом случае. Не нужно их зацикливать.