一、線程池簡介。
線程池是一種多線程處理形式,處理過程中將任務添加到隊列,然后在創(chuàng)建線程后自動啟動這些任務。線程池線程都是后臺線程。每個線程都使用默認的堆棧大小,以默認的優(yōu)先級運行,并處于多線程單元中。如果某個線程在托管代碼中空閑(如正在等待某個事件),則線程池將插入另一個輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間后創(chuàng)建另一個輔助線程但線程的數目永遠不會超過最大值。超過最大值的線程可以排隊,但他們要等到其他線程完成后才啟動。
使用線程池減少的是線程的創(chuàng)建和銷毀時間,因為創(chuàng)建一個對象要獲取內存資源,虛擬機跟蹤每個對象,以便可以在對象銷毀后進行垃圾回收,所以提高服務程序效率的一個重要手段就是盡可能的降低創(chuàng)建和銷毀對象的次數,特別是一些非常耗資源的對象創(chuàng)建和銷毀。
二、組成部分。
1、線程池管理器(ThreadPoolManager): 用于創(chuàng)建并管理線程池。包含 創(chuàng)建線程池,銷毀線程池,加入新任務。
2、工作線程(WorkThread): 線程池中的線程只有兩種狀態(tài):可運行狀態(tài)和等待狀態(tài)。
3、任務接口(Task): 每一個任務必須實現的接口 <有返回值的 callable 和無返回值的 runnable>,以供工作線程調度任務的運行。它主要規(guī)定了任務的入口。任務運行完后的收尾工作,任務的運行狀態(tài)等。
4、任務隊列(work queue):用于存放沒有處理的任務。提供一種緩沖機制,一般是 BlockingQuene 的實現類。
三、Java 線程池的原理和實現。
創(chuàng)建線程有兩種方式:繼承 Thread 或實現 Runnable。
Thread 實現了 Runnable 接口。提供了一個空的 run () 方法。所以不論是繼承 Thread 還是實現 Runnable,都要有自己的 run () 方法。
一個線程創(chuàng)建后就存在。調用 start () 方法就開始執(zhí)行(執(zhí)行 run () 方法)。調用 wait 進入等待或調用 sleep 進入休眠期,順利執(zhí)行完成或休眠被中斷或執(zhí)行過程中出現異常而退出。
線程池添加任務過程:
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.