Java 線程池ThreadPoolExecutor簡單應用

來源:互聯網
上載者:User

標籤:線程池

什麼是線程池:

線程池就是控制線程的一個池子。用來控制線程數量。

為什麼要使用線程池:

1.避免系統重複建立和銷毀線程影響啟動並執行時間(建立+銷毀>>執行時間時)

2.控制線程數量,線程過多會導致機器運行卡(大約一個線程佔用1M空間)

ThreadPoolExecutor構造方法


public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize, long keepAliveTime, TimeUnit unit,  BlockingQueue<Runnable> workQueue)

參數1:核心線程池大小(標準大小)

參數2:線程池最大大小

參數3:設定多長時間逾時回收線程

參數4:是一個枚舉,表示 keepAliveTime 的單位

參數5:存放任務的隊列


執行個體

public class ThreadPoolExecutorDemo {public static void main(String[] args) {//LinkedBlockingDeque線程隊列大小無限制,不會拋異常BlockingQueue<Runnable> queue  = new LinkedBlockingDeque<Runnable>();//如果核心線程和最大線程相同,那麼該線程是固定大小線程池。ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1, TimeUnit.DAYS, queue);for(int i=0;i<20;i++){executor.execute(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName());}});}System.out.println("-----------------------------------------------");for(int i=0;i<20;i++){executor.submit(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}});}executor.shutdown();}}
線程池在執行線程時會做出如下判斷:

1.如果線程數小於核心線程,那麼建立並執行這個縣城

2.如果線程數大於核心線程則放入隊列中

3.如果這時隊列滿了,並且小於最大線程數,那麼建立執行這個線程

4.如果隊列滿了,並且大於最大線程數,那麼拋異常。


當線程閑來無事時,超過了回收時間,並且線程池數量大於核心數量,那麼就回收,直到回到核心線程數量


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java 線程池ThreadPoolExecutor簡單應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.