※High-Level Threading Alternatives
●傳統執行緒相關API較難操做,可以考慮以下替代方案:
---ExecutorService: 以高階方式執行執行緒
●系統自動建立及重用執行緒
●可自執行緒運算完後獲得結果
※Withput Parallelism
●若沒有利用多執行緒的功能,同時間只有一顆CPU忙碌
※Naive Parallelism
●平行處理之程式如下: 將大量的資料分割成數個小資料,每個小量資料由一個執行緒負責運算。
※Work-Stealing
●建議不要將資料分割成太小
●將分割後的資料分配於執行緒的處理佇列
●每一支執行續的處理佇列內會有很多資料子集
●若某一執行緒提早完成,可從別的執行處理佇列終將未處理的資料子集拿來處理
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Test0610 {
public static void main(String[] args) {
//平行處理的觀念,1加到100,分成1加到50,和51到100
int cpuCount = Runtime.getRuntime().availableProcessors();
ExecutorService es = Executors.newFixedThreadPool(cpuCount);
List<Future<Integer>> l = new ArrayList<>();
Callable<Integer> call1 = new MyCallable(1,50);
Callable<Integer> call2 = new MyCallable(51,100);
Future<Integer>f1 =es.submit(call1);
l.add(f1);
Future<Integer>f2 =es.submit(call2);
l.add(f2);
int sum = 0;
for(Future<Integer> f : l){
try {
sum +=f.get();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(sum);
es.shutdown();
}
}
Out: 5050
留言列表