Java Executor的执行策略

时间:2014-03-05 14:15:31

标签: java

我正在使用Executors.newSingleThreadExecutor(),javadoc说: tasks are guaranteed to execute sequentially。所以我认为我的List<Future<String>> futures = new ArrayList<Future<String>>()会被订购,但事实并非如此。

列表的第一个元素是第3个线程的结果......

    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 
    .....

我没有得到逻辑。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

Executor只会并行处理一个任务 - 您一次提交所有任务 - 这意味着它们“可用”到执行队列。

Executor将能够选择队列中的任何任务并将其分配给一个跑步者线程。