Мне нужен блокирующий объект для запуска некоторых событий. A (один) Потребителю следует дождаться появления триггера. Затем он делает кое-что. Затем он снова ждет спусковой крючок. Триггеры активируются несколькими различными потоками (Производители). Но производители не производят никаких данных. Семантический смысл такого триггера: «Потребитель должен что-то сделать» (например, пересчитать некоторые значения, поскольку базовые данные изменились). Это означает, что даже если триггер активирован несколько раз, он должен появиться для Потребителя как один триггер.Какой блокирующий объект использовать?
Я думал об использовании CountDownLatch или ArrayBlockingQueue, но они не подходят.
Это триггер конструкт Я хотел бы использовать:
public class Trigger{
private final MagicBlockingObject blockingLatch;
public void trigger(){
//activate the blockingLatch, so that a call to waitForTrigger() returns
}
public void waitForTrigger(){
//read from the blockingLatch. This should block until trigger() is called.
}
}
Любые идеи о том, что использовать для MagicBlockingObject
?
Я думаю, что вы ищете 'java.util.concurrent.locks.Condition' –
синхронизируется просто для этого случая? – user987339
Вы выполняете простые операции с синхронизацией и wait(), notify(). – UDPLover