Мне любопытно, можно ли приостановить поток t
в Java и позволить другому потоку возобновить его позже, запустив t
следующий код паузы:
while(true) {
try {
synchronized(t) {
t.wait();
}
} catch(InterruptedException e) {
break;
}
}
А затем возобновить поток t
, вызвав в нем .interrupt()
. Однако я читал о ложных пробуждениях, и поэтому мне стало интересно, может ли мой код выйти из цикла while, несмотря на то, что никакой другой поток не вызывает в нем .interrupt()
. Хотя этот ответ и этот ответ заявить, что нет ложных прерываний, и, следовательно, мой код никогда не даст сбой, документация по Java, похоже, не решает эту проблему. Мой вопрос, вероятно, сводится к тому, выбрасывается ли когда-либо InterruptedException
без прерывания потока .interrupt()
. Есть ли какой-либо официальный источник или документация, подтверждающая это?
interrupt()
является хорошей идеей в этом случае, вместо этого должно помочь изменчивое логическое поле. - person biziclop   schedule 20.08.2018synchronized
для объекта потока? Вы синхронизируете объект, используемый несколькими потоками, а не сами потоки. Используйтеwait
иnotify
для паузы и возобновления. - person Susmit Agrawal   schedule 20.08.2018java.util.concurrent
класс, который делает именно то, что вам нужно, в вашем случае, вероятно,CountdownLatch
илиCyclicBarrier
. - person biziclop   schedule 20.08.2018synchronized
здесь, потому что этого требует Java ... - person user21820   schedule 20.08.2018synchronized
. Чтобы понять суть,synchronized
используется, когда два или более разных потока используют один и тот же объект, чтобы предотвратить одновременный доступ к объекту из потоков. - person Susmit Agrawal   schedule 20.08.2018.wait()
должен быть заключен в синхронизированный блок. В любом случае мой вопрос заключается в том, работает ли мой код так, как указано, а не в том, существуют ли другие способы достижения той же цели. - person user21820   schedule 20.08.2018