您好,登錄后才能下訂單哦!
如何進(jìn)行ThreadPoolExecutor的keepAliveTime=0說(shuō)明,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
上圖來(lái)自《并發(fā)編程的藝術(shù)》一書,書中有下面一段描述:
““當(dāng)線程池中的線程數(shù)大于corePoolSize時(shí),keepAliveTime 為多余的空閑線程等待新任務(wù)的最長(zhǎng)時(shí)間, 超過(guò)這個(gè)時(shí)間后多余的線程將被終止。這里把keepAliveTime設(shè)置為0L,意味著多余 的空閑線程會(huì)被立即終止?!?/p>
網(wǎng)上很多資料都是說(shuō)的0表示在空閑的時(shí)候線程永久存活。其實(shí)是不準(zhǔn)確的。
附上驗(yàn)證代碼:
public static void main(String[] args) throws InterruptedException {
// 創(chuàng)建了一個(gè)線程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(1,
2,
0, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(1));
for (int i = 0; i < 3; i++) {
executor.execute(new DemoTask(i));
}
while (true) {
System.out.println("總線程數(shù):" + executor.getPoolSize() + ", 當(dāng)前活躍線程數(shù):" + executor.getActiveCount());
TimeUnit.SECONDS.sleep(1);
}
}
static class DemoTask implements Runnable {
int num;
public DemoTask(int i) {
this.num = i;
}
@Override
public void run() {
System.out.println("num=" + num + " Thread = " + Thread.currentThread().getName());
if (num >= 1) {
try {
TimeUnit.SECONDS.sleep(1);
System.out.println("num=" + num + " sleep 1 s結(jié)束");
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
TimeUnit.SECONDS.sleep(3);
System.out.println("num=" + num + " sleep 3 s結(jié)束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
打印結(jié)果:
num=2 Thread = pool-1-thread-2
總線程數(shù):2, 當(dāng)前活躍線程數(shù):2
num=0 Thread = pool-1-thread-1
num=2 sleep 1 s結(jié)束
num=1 Thread = pool-1-thread-2
總線程數(shù):2, 當(dāng)前活躍線程數(shù):2
num=1 sleep 1 s結(jié)束
總線程數(shù):1, 當(dāng)前活躍線程數(shù):1
num=0 sleep 3 s結(jié)束
總線程數(shù):1, 當(dāng)前活躍線程數(shù):1
總線程數(shù):1, 當(dāng)前活躍線程數(shù):0
總線程數(shù):1, 當(dāng)前活躍線程數(shù):0
關(guān)于如何進(jìn)行ThreadPoolExecutor的keepAliveTime=0說(shuō)明問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。