首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用执行器框架的线程池

使用执行器框架的线程池
EN

Stack Overflow用户
提问于 2017-04-07 01:07:38
回答 1查看 65关注 0票数 0

我正在使用executor框架来创建Fadder对象的多个实例并打印结果。我正在努力学习如何使用多个线程来更快地完成任务。我遇到的问题是,每次运行程序时,数字都是以随机顺序打印的。我认为为循环的每一次迭代创建一个新对象可以解决这个问题,但它仍然以“随机”顺序打印数字。有任何方法可以保证线程按照它们应该运行的顺序打印吗?比如1,2,3,4,5,谢谢

代码语言:javascript
复制
package fadder;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Fadder {
    private final int n;
    Fadder(int n){
        //initialize Fadder
        this.n = n;
    }
    Fadder add(int m){
        //create new Fadder
        return new Fadder(n+m);
    }
public static void main(String[] args) {
     int threadnum = Runtime.getRuntime().availableProcessors();
        ExecutorService executor = Executors.newFixedThreadPool(threadnum);
        Fadder MyAdder = new Fadder(1);
        for (int i = 0; i < 5; i+=1 ) {
            int index = i;
            //lambda function to print Fadder
        executor.submit(() -> {
                    System.out.println(String.valueOf(MyAdder.add(index)));
                });
    }
    executor.shutdown();
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 01:20:09

您无法保证许多线程将在其中处理代码的顺序。但是,将平行流,你可以。见下文:

代码语言:javascript
复制
Stream<Integer> stream = Stream.iterate(1, i->i+1).limit(5) ;
      stream.parallel().forEachOrdered(System.out::println);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43268095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档