java - JavaExecutor的执行策略

标签 java

我正在使用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/

相关文章:

Java Arraylist - 编译错误

java - 以编程方式识别 Tomcat 启动

java - Java 图像即将出现在 NPE 中

java - 当传递给带有可变参数的第二个泛型方法时,我在泛型方法中丢失了变量的类型

java - 如何隐藏SWT浏览器或以 headless 模式运行?

java - Servlet "newspring"不可用

java输入流不读取前导十六进制字节

System Groovy 脚本中的 java.lang.NumberFormatException

java - 底部导航栏 fragment 多次

java - 如何使用jdbc获取存储引擎