1. 程式人生 > 其它 >Java多執行緒20-執行緒池

Java多執行緒20-執行緒池

20、執行緒池

  • 背景:經常建立和銷燬、使用量特別大的資源,比如併發情況下的執行緒,對效能影響很大。

  • 思路:提前建立好多個執行緒,放入執行緒池中,使用時直接獲取,使用完放回池中。可以避免頻繁建立銷燬、實現重複利用。類似生活中的公共交通工具。

  • 好處

    • 提高響應速度(減少了建立新執行緒的時間)
    • 降低資源消耗(重複利用執行緒池中執行緒,不需要每次都建立)
    • 便於執行緒管理
      • corePoolSize:核心池的大小
      • maximumPoolSize:最大執行緒數
      • keepAliveTime:執行緒沒有任務時最多保持多長時間會終止
      • ...

    使用執行緒池

    • jdk5.0起提供了執行緒池相關api:ExecutorService和Executors
    • ExecutorService:真正的執行緒池介面。常見子類ThreadPoolExcutor
      • void execute(Runnabe command):執行任務/命令,沒有返回值,一般用來執行Runnable
      • Future submit(Callable task):執行任務,有返回值,一般用來執行Callable
      • void shutdown():關閉連線池
    • Executors:工具類、執行緒池的工廠類,用於建立並返回不同型別的執行緒池

程式碼演示

public class PoolDemo {
    public static void main(String[] args) {
        //建立服務,建立執行緒池,執行緒池大小5(不推薦用下面這種方式建立執行緒池,避免資源耗盡的風險)
        ExecutorService service = Executors.newFixedThreadPool(5);
        //執行任務
        service.submit(new MyThread());
        service.submit(new MyThread());
        service.submit(new MyThread());
        service.submit(new MyThread());
        service.submit(new MyThread());
        service.submit(new MyThread());
        service.submit(new MyThread());
        //關閉執行緒池
        service.shutdown();
    }
}

class MyThread implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}

本文來自部落格園,作者:Cn_FallTime,轉載請註明原文連結:https://www.cnblogs.com/CnFallTime/p/15907430.html