2

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

4

2 回答 2

4

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

并且为了确保在您的进程继续执行剩余代码之前所有线程都完成了各自的工作,您只需调用ThreadPoolExecutor'awaitTermination方法,然后调用最终ThreadPoolExecutor的 'shutdown方法。

您还可以在调用之后发送notify/以唤醒其他一些与结果相关的线程。notifyAllawaitTermination

ExecutorService文档中编写了一个示例(由 实现ThreadPoolExecutor)。

于 2013-04-21T02:02:38.477 回答
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()在应该出队时调用。

于 2013-04-21T02:13:22.977 回答