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