多線程與單線程的效率對比


在計算比較簡單,任務耗時較少的情況下,Java使用多線程執行任務的效率往往沒有單線程高,
因為多線程在執行期間切換線程上下文的頻率會成倍提高,執行簡單任務時多線程的線程切換耗時會大量增加執行時間,所以多線程並發最好是盡量用在耗時較多或IO請求的程序上

package hsy.com;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test {
    private static ExecutorService executorService = Executors.newFixedThreadPool(10);
    public static void main(String[] args){
        long stTime = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 100000; j++) {
                System.out.println(j);
            }
        }
        System.out.println(System.currentTimeMillis()-stTime);
        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        List<Object> list = new ArrayList();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        stTime = System.currentTimeMillis();
        CompletableFuture[] objects = list.stream().map(i -> CompletableFuture.runAsync(() -> {
            for (int j = 0; j < 100000; j++) {
                System.out.println(j);
            }
        }, executorService)).toArray(CompletableFuture[]::new);
        CompletableFuture.allOf(objects).join();
        System.out.println(System.currentTimeMillis()-stTime);

    }
}


執行結果

單線程 2800ms
多線程 3400ms


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM