Итак, вот что я пытаюсь выполнить:Java-исполнители: Как уведомить один ожидающий поток в executer?
У меня есть FixedThreadPool с 5 потоками в нем. Эти потоки просто сидят и ждут, чтобы их уведомили. Когда сообщается, поток в пуле начинает делать вещи.
Теперь, когда происходит какое-то инициирующее событие, один и только один Ожидание Поток в пуле должен быть извещен. Возможно ли это сделать?
Вот что я пытался, но я получаю IllegalMonitorStateException:
public class Server {
private class WorkerThread implements Runnable{
private Object lock = null;
WorkerThread(Object lock){
this.lock = lock;
}
public void run() {
try{
do{
synchronized(lock){
wait();
}
// doSomeThing
}while(true);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
private ExecutorService executor = null;
private Object lock = new Object();
Server() {
executor = Executors.newFixedThreadPool(5);
for(int i=0; i<5; i++){
executor.execute(new WorkerThread(lock));
}
}
public void calledWhenTriggerEventOccurs(){
synchronized(lock) {executor.notify();}
}
}
отправьте одну задачу в пул, и один поток из пула выполнит ее. Я не уверен, что понимаю ваш вопрос. –
Реализовать собственный пул потоков. В общем, однако идея пула потоков предлагать ряд сменных потоков без определенного требования для запуска задачи по определенному потоку. –