与队列的Java并发

时间:2013-04-21 01:55:52

标签: java multithreading concurrency queue

我要做的是基本上启动新线程,将它们添加到队列中,然后在它们出列时执行其余代码。我不确定将它们添加到队列的最佳方法是什么,以及如何在一个点暂停一个线程并在它们出列时通知它们。我之前在Java中并没有真正完成过多的并发编程。任何帮助或建议将不胜感激!感谢

2 个答案:

答案 0 :(得分:4)

您可以使用ThreadPoolExecutor,基本上可以根据多个可自定义的规则创建一个线程池。

为了确保所有主题在您的流程处理其余代码之前已经完成了各自的工作,您只需要调用ThreadPoolExecutor的{​​{1}}方法,然后再进行{{1} } awaitTermination方法。

您也可以在调用ThreadPoolExecutor后发送shutdown / notify,以便唤醒其他一些与结果相关的线程。

示例写在ExecutorService documentation中(由notifyAll实现)。

答案 1 :(得分:1)

wait()notify()可以用于此目的:

class QueuedThread extends Thread {
    private volatile boolean wait = true; //volatile because otherwise the thread running run() might cache this value and run into an endless loop.

    public void deQueue() {
        synchronized(this) {
            wait = false;
            this.notify();
        }
    }

    public void run() {
        synchronized(this) {
            while (wait) { //You need this extra mechanism because wait() can come out randomly, so it's a safe-guard against that (so you NEED to have called deQueue() to continue executing).
                this.wait();
            }
        }
    //REST OF RUN METHOD HERE
    }
}

只应在queuedThread.deQueue()出局时调用它。