我正在使用Executors.newSingleThreadExecutor()
javadoc 说:
tasks are guaranteed to execute sequentially
。所以我认为我的List<Future<String>> futures = new ArrayList<Future<String>>()
将会被订购,但事实并非如此。
列表的第一个元素是第三个线程的结果...
ExecutorService pool = Executors.newSingleThreadExecutor();
List<Future<String>> futures = new ArrayList<Future<String>>();
for (int i=0;i<x.size();i++){
futures.add(pool.submit(new ThreadTest()));
}
pool.shutdown();
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
String test= futures.get(0).get(); <-- The result of the 3rd thread
String test1 = futures.get(1).get(); <-- The result of the 5th thread
.....
我没明白逻辑。
有什么想法吗?
谢谢
最佳答案
执行器只会并行处理一项任务 - 您一次提交所有任务 - 这意味着它们对执行队列“可用”。
执行器将能够选择队列中的任何任务并将其分配给一个运行线程。
关于java - JavaExecutor的执行策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200272/