技術深入分析java線程池的實現(xiàn)原理

技術深入分析java線程池的實現(xiàn)原理

ID:34763759

大?。?.28 MB

頁數:22頁

時間:2019-03-10

技術深入分析java線程池的實現(xiàn)原理_第1頁
技術深入分析java線程池的實現(xiàn)原理_第2頁
技術深入分析java線程池的實現(xiàn)原理_第3頁
技術深入分析java線程池的實現(xiàn)原理_第4頁
技術深入分析java線程池的實現(xiàn)原理_第5頁
資源描述:

《技術深入分析java線程池的實現(xiàn)原理》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫

1、www.gxaedu.com技術分享?

2、?深入分析java線程池的實現(xiàn)原理線程是稀缺資源,如果無限制的創(chuàng)建,不僅會消耗系統(tǒng)資源,還會降低系統(tǒng)的穩(wěn)定性,合理的使用線程池可以對線程進行統(tǒng)一的分配、調優(yōu)和監(jiān)控,并有以下好處——降低資源消耗;提高響應速度;提高線程的可管理性。Java1.5引入的Executor框架把任務的提交和執(zhí)行進行解耦,只需要定義好任務,然后提交給線程池,而不用關心該任務是如何執(zhí)行、被哪個線程執(zhí)行,以及什么時候執(zhí)行。矚慫潤厲釤瘞睞櫪廡賴。案例11、Executors.newFixedThreadPool(

3、10)初始化一個包含10個線程的線程池executor;聞創(chuàng)溝燴鐺險愛氌譴凈。2、通過?executor.execute?方法提交20個任務,每個任務打印當前的線程名;3、負責執(zhí)行任務的線程的生命周期都由Executor框架進行管理。www.gxaedu.comThreadPoolExecutorExecutors是java線程池的工廠類,通過它可以快速初始化一個符合業(yè)務需求的線程池,如?Executors.newFixedThreadPool?方法可以生成一個擁有固定線程數的線程池。殘騖樓諍錈瀨濟溆塹籟。其本質是通過

4、不同的參數初始化一個ThreadPoolExecutor對象,具體參數描述如下:corePoolSize線程池中的核心線程數,當提交一個任務時,線程池創(chuàng)建一個新線程執(zhí)行任務,直到當前線程數等于corePoolSize;如果當前線程數為corePoolSize,繼續(xù)提交的任務被保存到阻塞隊列中,等待被執(zhí)行;如果執(zhí)行了線程池的prestartAllCoreThreads()方法,線程池會提前創(chuàng)建并啟動所有核心線程。釅錒極額閉鎮(zhèn)檜豬訣錐。maximumPoolSize線程池中允許的最大線程數。如果當前阻塞隊列滿了,且繼續(xù)提交

5、任務,則創(chuàng)建新的線程執(zhí)行任務,前提是當前線程數小于maximumPoolSize;彈貿攝爾霽斃攬磚鹵廡。keepAliveTime線程空閑時的存活時間,即當線程沒有任務執(zhí)行時,繼續(xù)存活的時間;默認情況下,該參數只在線程數大于corePoolSize時才有用;www.gxaedu.com謀蕎摶篋飆鐸懟類蔣薔。unitkeepAliveTime的單位workQueue用來保存等待被執(zhí)行的任務的阻塞隊列,且任務必須實現(xiàn)Runable接口,在JDK中提供了如下阻塞隊列:1、ArrayBlockingQueue:基于數組結構的有

6、界阻塞隊列,按FIFO排序任務;2、LinkedBlockingQuene:基于鏈表結構的阻塞隊列,按FIFO排序任務,吞吐量通常要高于ArrayBlockingQuene;廈礴懇蹣駢時盡繼價騷。3、SynchronousQuene:一個不存儲元素的阻塞隊列,每個插入操作必須等到另一個線程調用移除操作,否則插入操作一直處于阻塞狀態(tài),吞吐量通常要高于LinkedBlockingQuene;煢楨廣鰳鯡選塊網羈淚。4、priorityBlockingQuene:具有優(yōu)先級的無界阻塞隊列。threadFactory創(chuàng)建線程的工

7、廠,通過自定義的線程工廠可以給每個新建的線程設置一個具有識別度的線程名。www.gxaedu.comhandler線程池的飽和策略,當阻塞隊列滿了,且沒有空閑的工作線程,如果繼續(xù)提交任務,必須采取一種策略處理該任務,線程池提供了4種策略:鵝婭盡損鵪慘歷蘢鴛賴。1、AbortPolicy:直接拋出異常,默認策略;2、CallerRunsPolicy:用調用者所在的線程來執(zhí)行任務;3、DiscardOldestPolicy:丟棄阻塞隊列中靠最前的任務,并執(zhí)行當前任務;4、DiscardPolicy:直接丟棄任務。當然也可以

8、根據應用場景實現(xiàn)RejectedExecutionHandler接口,自定義飽和策略,如記錄日志或持久化存儲不能處理的任務。籟叢媽羥為贍僨蟶練淨。ExectorsExectors工廠類提供了線程池的初始化接口,主要有如下幾種:newFixedThreadPool初始化一個指定線程數的線程池,其中corePoolSize==maximumPoolSize,使用LinkedBlockingQuene作為阻塞隊列,不過當線程池沒有可執(zhí)行任務時,也不會釋放線程。預頌圣鉉儐歲齦訝驊糴。newCachedThreadPoolwww

9、.gxaedu.com1、初始化一個可以緩存線程的線程池,默認緩存60s,線程池的線程數可達到Integer.MAX_VALUE,即2147483647,內部使用SynchronousQueue作為阻塞隊列;滲釤嗆儼勻諤鱉調硯錦。2、和newFixedThreadPool創(chuàng)建的線程池不同,newCachedThreadPool在沒

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。