Java执行程序:如何通知执行程序中的单个等待线程?

时间:2014-12-12 22:25:21

标签: java multithreading wait notify executor

所以这就是我想要完成的事情:

我有一个包含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();}
    }
}

1 个答案:

答案 0 :(得分:2)

Object.notifyAll通知在此Object的监视器上等待的所有线程。 Object.notify通知一个(随机)线程在监视器上等待。 这是你在找什么?