生活随笔
收集整理的這篇文章主要介紹了
Java多线程之线程池详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java多線程之線程池詳解
目錄:
線程池使用及優(yōu)勢線程池3個常用方式線程池7大參數(shù)深入介紹線程池底層工作原理
1. 線程池使用及優(yōu)勢
線程池做的工作主要是控制運行的線程的數(shù)量,處理過程中將任務(wù)放入隊列,然后在線程創(chuàng)建后啟動這些任務(wù),
如果線程數(shù)量超過了最大數(shù)量 超出數(shù)量的 線程排隊等候,等其它線程執(zhí)行完畢,再從隊列中取出任務(wù)來執(zhí)行。它的主要特點為:線程復(fù)用,控制最大并發(fā)數(shù),管理線程。
優(yōu)點:
降低資源消耗。通過重復(fù)利用己創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。提高響應(yīng)速度。當(dāng)任務(wù)到達時,任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。提高線程的可管理性。線程是稀缺資源,如果無限制的創(chuàng)建,不僅會消耗系統(tǒng)資源,還會降低系統(tǒng)的穩(wěn)定性,使用線程池可以進
行統(tǒng)一的分配,調(diào)優(yōu)和監(jiān)控
2. 線程池3個常用方式
Java中的線程池是通過Executor框架實現(xiàn)的,該框架中用到了Executor,Executors,
ExecutorService,ThreadPoolExecutor這幾個類。
線程池3個常用方式:
Executors.newFixedThreadPool(int) :執(zhí)行長期任務(wù),性能好很多Executors.newSingleThreadExecutor() : 一個任務(wù)一個任務(wù)執(zhí)行的場景Executors.newCachedThreadPooI() : 執(zhí)行很多個短期異步的小程序或者負(fù)載較輕的服務(wù)器。
先看代碼,再根據(jù)源碼總結(jié)
1. Executors.newFixedThreadPool(int)
Executors.newFixedThreadPool(int)概述
代碼驗證
public class MyThreadPoolDemo {public static void main(String
[] args
) {
ExecutorService threadPool
= Executors
.newFixedThreadPool(5);try {for (int i
= 1; i
<= 10; i
++) {threadPool
.execute(() -> {System
.out
.println(Thread
.currentThread().getName()+"\t 辦理業(yè)務(wù)");});}} catch (Exception e
) {e
.printStackTrace();} finally {threadPool
.shutdown();}}
}
執(zhí)行結(jié)果:
2. Executors.newSingleThreadExecutor()
Executors.newSingleThreadExecutor()概述代碼驗證
public class MyThreadPoolDemo {public static void main(String
[] args
) {ExecutorService threadPool
= Executors
.newSingleThreadExecutor();try {
for (int i
= 1; i
<= 10; i
++) {threadPool
.execute(() -> {System
.out
.println(Thread
.currentThread().getName()+"\t 辦理業(yè)務(wù)");});}} catch (Exception e
) {e
.printStackTrace();} finally {threadPool
.shutdown();}}
}
執(zhí)行結(jié)果:
3. Executors.newCachedThreadPooI()
Executors.newCachedTIyeadPooI() 概述
代碼驗證:
public class MyThreadPoolDemo {public static void main(String[] args) {ExecutorService threadPool = Executors.newCachedThreadPool();try {
// 模擬10個用戶來辦理業(yè)務(wù),每個用戶就是一個來自外部的請求線程。for (int i = 1; i <= 10; i++) {threadPool.execute(() -> {System.out.println(Thread.currentThread().getName() + "\t 辦理業(yè)務(wù)");});}} catch (Exception e) {e.printStackTrace();} finally {threadPool.shutdown();}}
}
執(zhí)行結(jié)果:
3. 線程池7大參數(shù)深入介紹
篇幅限制,另開一篇詳細說明。
Java多線程之線程池7大參數(shù)詳解
4. 線程池底層工作原理
篇幅限制,另開一篇詳細說明。
Java多線程之線程池底層工作原理
總結(jié)
以上是生活随笔為你收集整理的Java多线程之线程池详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。