所以这就是我想要完成的事情:
我有一个包含5个线程的FixedThreadPool。那些线程只是坐在那里等待通知。 通知后,池中的线程开始执行操作。
现在,每当发生某些触发事件时,必须通知池中只有一个等待线程。 是否有可能实现这一目标?
这是我尝试过的,但是我收到了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();}
}
}
答案 0 :(得分:2)
Object.notifyAll
通知在此Object的监视器上等待的所有线程。 Object.notify
通知一个(随机)线程在监视器上等待。
这是你在找什么?