close

※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

arrow
arrow
    創作者介紹
    創作者 淺翔 的頭像
    淺翔

    翔の學習淺談

    淺翔 發表在 痞客邦 留言(0) 人氣()