工作线程只在队列中有东西时才消耗cpu

时间:2015-09-16 14:13:50

标签: java multithreading queue

这是我想要做的。

我希望有一个具有队列并启动线程的对象。另一个线程可以通过执行object.addWork(work);

来推送到该队列

这会将工作推入队列并在线程休眠时唤醒它。然后,线程对队列中的每个对象执行工作,直到队列为空。

一旦队列为空并且不再有剩余工作,该线程就会休眠并需要再次添加到队列中来唤醒。

是否有一种线程安全的方式来制作这样的对象?

1 个答案:

答案 0 :(得分:5)

你基本上想要Executors.newSingleThreadExecutor能做什么

class YouNameIt{
    private ExecutorService executor;

    public void start(){
        executor = Executors.newSingleThreadExecutor();
    }

    public void put(Object o){
        executor.submit(new Runnable() {
            @Override
            public void run() {
                process(o);
            }
        });
    }

    private void process(Object o) {
        //Put your processing here
    }

    public void stop(){
        executor.shutdown();
    }
}