如何实现线程的FIFO队列?

时间:2014-07-03 14:13:20

标签: java multithreading

如何实现线程的FIFO队列(要执行的任务)并逐个执行线程? 我的意思是,例如,取第一个线程并运行它,第二个线程必须等待第一个线程的执行结束。 同时我必须能够将线程(任务)添加到队列中。

3 个答案:

答案 0 :(得分:6)

仅使用一个线程创建FixedThreadPool并向其提交任务。它们将一个接一个地执行,就像在FIFO队列中一样:

ExecutorService es = Executors.newFixedThreadPool(1); // one thread only
// ...
for(Runnable r : myRunnables) {
    es.submit(r);
}

答案 1 :(得分:2)

正如Vakh所说,使用ExecutorService来运行线程,但我建议使用SingleThreadExecutor。 SingleThreadExectutor保证顺序执行线程,因为与FixedThreadPool不同,它不能重新配置为使用不同数量的线程。

ExecutorService es = Executors.newSingleThreadExecutor(); // one thread only
// ...
for(Runnable r : myRunnables) {
    es.submit(r);
}

您也可以调用Thread.join()告诉当前线程阻止exectution,直到另一个线程死亡。

Thread t = new Thread(myRunnable);
t.join(); //Wait until t dies

连接的变体会设置最长等待时间

答案 2 :(得分:0)

如果您希望所有主题同时运行但您不希望他们使用特定资源或任务,那么您可以使用Synchronized Methods