#java #multithreading
#java #многопоточность
Вопрос:
Я хочу, чтобы поток ожидал, пока не будет подано любое из двух условий. Возможно ли это?
Предположим, поток обрабатывает входящие пакеты данных, в то время как пользователь, возможно, прерывает работу, изменяя некоторые состояния.
Одно условие сигнализируется при поступлении пакета, а другое сигнализируется при изменении состояний.
Я думаю, что нецелесообразно использовать одно условие для обоих событий, потому что это вызвало бы множество ненужных пробуждений в других потоках, которые отслеживают состояния.
Ответ №1:
Вы можете добавить третье условие, о котором сигнализируют как входящие пакеты, так и изменения состояния пользователя? Я не думаю, что возможно ожидать при нескольких условиях.
Комментарии:
1. Значит, каждый сигнальный поток подает сигналы дважды (
packetCond.signalAll(); packetOrStatesCond.signalAll();
)? Далеко не элегантно, но все равно сработало. Спасибо.
Ответ №2:
Используйте семафор с двумя разрешениями, пусть ваш ожидающий элемент получит эти 2, и пусть ваши события освобождают эти разрешения по одному за раз, пока не вернутся 2?
Комментарии:
1. Это дает вам оба из двух условий. Оператору требуется любое из двух условий.