0
我正在使用执行程序框架来创建Fadder对象的多个实例并打印结果。我正在尝试学习如何使用多线程来更快地完成任务。我遇到的问题是,每次运行程序时都会按随机顺序打印数字。我认为为循环的每次迭代创建一个新对象可以解决这个问题,但它仍然以“随机”顺序打印数字。有没有什么方法可以保证线程按照它们假定的运行顺序打印?像1,2,3,4,5。谢谢使用执行程序的线程池Framrwork
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();
}
}
是:你的第一个行更改为'INT threadnum = 1;' - 老实说,请上线阅读了 - 整点是,他们可以做的事情在并行,各自在自己的速度。如果你想按顺序打印数字,那么你不应该使用线程。为此使用线程不会使其更快。如果计算数量需要很长时间,那么线程可能是有意义的,您可以在单独的线程中进行计算,将所有结果收集到一个集合中,然后对它们进行排序。 –
Fadder没有'toString'方法,你怎么知道它们运行的顺序? – immibis
谢谢Erwin,我知道threadnum = 1,但这只是一个测试,看看我是否能按照我想要的一个更大的程序工作。 – Art