【发布时间】:2011-05-27 02:38:37
【问题描述】:
我正在使用Executor 框架,特别是Executors.newCachedThreadPool();
我有一个Runnables 的列表,例如100.
前 50 个,每个创建一个值(存储在列表中)供最后 50 个使用。
我想如果我按照它们在列表中的顺序通过executor.execute() 中的Runnables,它们将是
也以相同的顺序执行。
但这并没有发生。
这些任务似乎是按随机顺序执行的,它们是交错的,而不是按顺序执行的。
这是它应该如何工作的吗?有什么办法可以解决这个问题?
谢谢
【问题讨论】:
-
Executors.execute() 不做任何排序保证。工作人员将按顺序从队列中取出,但可以在完成前的任何时间进行上下文切换。因此,如果您有 50 个线程,则列表最多可以跳过 50 个任务。
-
只有一个线程才能保证订单。否则下一个空闲线程将启动下一个可用任务。
标签: java multithreading executorservice executor