聲明:原創(chuàng)文章奔穿,轉(zhuǎn)載請注明出處。http://www.reibang.com/u/e02df63eaa87
一茵乱、線程池的使用
1、單線程線程池
public class SingleThread {
public static void main(String[] args) {
ExecutorServic eexecutor = Executors.newSingleThreadExecutor();
for (inti = 0; i < 5; i++) {
final int no = i;
Runnable runnable = newRunnable() {
public void run() {
System.out.println(no);
}
};
executor.execute(runnable);
}
executor.shutdown();
}
}
2椒拗、固定線程數(shù)的線程池
public class FixedThreadPool {
public static void main(String[] args) {
ExecutorServiceexecutor = Executors.newFixedThreadPool(5);
for (inti = 0; i < 20; i++) {
finalintno = i;
Runnablerunnable = newRunnable() {
publicvoidrun() {
try {
System.out.println("In:" + no);
Thread.sleep(1000);
System.out.println("Out:" + no);
} catch(Exceptione) {}
}
};
executor.execute(runnable);
}
executor.shutdown();
}
}
3、定時周期執(zhí)行指定的任務(wù)
public class ScheduledThread {
public static void main(String[] args) {
//以固定延遲時間進(jìn)行執(zhí)行,本次執(zhí)行完成后蚀苛,到達(dá)延遲時間才會執(zhí)行新的任務(wù)
ScheduledExecutorServiceexecutor = Executors.newScheduledThreadPool(1);
executor.scheduleWithFixedDelay(newPrintThread(1), // 任務(wù)名字
0, // 初始化延時0秒后開始執(zhí)行
1, // 每隔1秒執(zhí)行一次
TimeUnit.SECONDS // 時間單位
);
}
}
二在验、線程池的好處
1、四個好處
(1)降低資源消耗:降低線程的創(chuàng)建和銷毀產(chǎn)生的消耗堵未。
(2)提高響應(yīng)速度:任務(wù)達(dá)到時腋舌,任務(wù)可以不需要等到線程創(chuàng)建就能立即執(zhí)行。
(3)提高線程的可管理性:統(tǒng)一分配渗蟹,調(diào)優(yōu)和監(jiān)控块饺。
(4)防止服務(wù)器過載,形成內(nèi)存溢出雌芽,或CPU耗盡授艰。
2、線程池技術(shù)提高程序的性能
多線程技術(shù)主要解決處理器單元內(nèi)多個線程執(zhí)行的問題世落,可以顯著減少處理器單元的閑置時間淮腾,增加處理器單元的吞吐能力。
3屉佳、線程池的應(yīng)用范圍
(1)需要大量的線程來完成任務(wù)谷朝,且完成任務(wù)的時間比較短。
(2)對性能要求苛刻的應(yīng)用武花。
(3)接收突發(fā)性的大量請求圆凰,但不至于使服務(wù)器因此產(chǎn)生大量的線程應(yīng)用。
三体箕、線程池的工作機(jī)制和原理
1专钉、線程池核心的兩個隊列:
- 線程等待池,即線程隊列BlockingQueue干旁。
- 任務(wù)處理池驶沼,即正在工作的Thread列表。
2争群、線程池的核心參數(shù):
- 核心池的大小回怜,即固定大小。
- 最大處理線程池數(shù)换薄,當(dāng)線程池里面的線程數(shù): 核心池大小 < 線程數(shù) < 最大處理線程池數(shù)玉雾,會動態(tài)創(chuàng)建與回收線程池里面的線程資源(如果當(dāng)前核心池的線程都在工作,并且還有任務(wù)時轻要,會臨時增加的線程數(shù)
)复旬。
3、線程池任務(wù)拒絕策略
(1)AbortPolicy:直接拋出異常冲泥。
(2)CallerRunPolicy:只用調(diào)用者所在線程來運行任務(wù)驹碍。
(3)DiscardOldestPolicy:丟棄隊列中的最舊的一個任務(wù)壁涎,并執(zhí)行當(dāng)前任務(wù)。
(4)DiscardPolicy:不處理志秃,丟棄掉怔球。