日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ava线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束

發(fā)布時間:2024/1/23 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ava线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天同事突然提出問題說用哪個線程池好,newFixedThreadPool和newCacheThreadPool里選擇,說固定大小線程池keepAliveTime=0,線程空閑會立馬回收線程從而節(jié)約資源,然后另外一個同事說,0是代表永遠不回收,我記憶里也是記得0是永久存活,因為網(wǎng)上很多博客啊,資料啊都是說的0表示線程永久存活在空閑的時候。前面那位同事也是從字面上認為的,沒有經(jīng)過驗證,覺得-1才是永久不回收,然后各自進行了一波研究分析。

經(jīng)過看源碼,發(fā)現(xiàn)keepAliveTime<0是不行的,直接報錯,也就是同事的猜測-1才是不回收 是錯誤的,看下面代碼圖示(別問我怎么給代碼里部分標(biāo)紅,直接用瀏覽器F12自己編輯頁面寫標(biāo)簽樣式進去的。。)

public ThreadPoolExecutor(int corePoolSize,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int maximumPoolSize,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? long keepAliveTime,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TimeUnit unit,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BlockingQueue<Runnable> workQueue,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ThreadFactory threadFactory,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RejectedExecutionHandler handler) {
? ? ? ? if (corePoolSize < 0 ||
? ? ? ? ? ? maximumPoolSize <= 0 ||
? ? ? ? ? ? maximumPoolSize < corePoolSize ||
? ? ? ? ? ? keepAliveTime < 0)
? ? ? ? ? ? throw new IllegalArgumentException();
? ? ? ? if (workQueue == null || threadFactory == null || handler == null)
? ? ? ? ? ? throw new NullPointerException();
? ? ? ? this.acc = System.getSecurityManager() == null ?
? ? ? ? ? ? ? ? null :
? ? ? ? ? ? ? ? AccessController.getContext();
? ? ? ? this.corePoolSize = corePoolSize;
? ? ? ? this.maximumPoolSize = maximumPoolSize;
? ? ? ? this.workQueue = workQueue;
? ? ? ? this.keepAliveTime = unit.toNanos(keepAliveTime);
? ? ? ? this.threadFactory = threadFactory;
? ? ? ? this.handler = handler;
? ? }
然后找keepAliveTime的使用一時半會也沒找到,就用代碼測試了,發(fā)現(xiàn)設(shè)置keepAliveTime=0核心線程數(shù)確實沒有回收,后面同事說在并發(fā)病程的藝術(shù)那本書上有一段描述

“當(dāng)線程池中的線程數(shù)大于corePoolSize時,keepAliveTime為多余的空閑線程等待新任務(wù)的 最長時間,超過這個時間后多余的線程將被終止。這里把keepAliveTime設(shè)置為0L,意味著多余 的空閑線程會被立即終止。”

同事又開始迷茫了,我一開始沒細看,覺得說的不對,后面反復(fù)閱讀,發(fā)現(xiàn)這段文字描述的是說keepAliveTime控制的是非核心線程數(shù)的回收,也就是0的時候,非核心線程數(shù)會在空閑的時候回收,并不是說核心的會回收。

為了驗證結(jié)果,我們就用代碼進行了測試,測試代碼如下:

package com.xhs.concurrent.threaddemo.sync;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
?
/**
?* @author xuhan ?build ?2019/4/23
?*/
public class ExecutorsDemo implements Runnable{
?
? ? private int i=0;
?
? ? public ExecutorsDemo(int i) {
? ? ? ? this.i = i;
? ? }
? ? public static void main(String[] args) {
? ? ? ? ThreadPoolExecutor executor = new ThreadPoolExecutor(1,2,0, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(1));
? ? ? ? for(int i=0;i<3;i++){
? ? ? ? ? ? executor.execute(new ExecutorsDemo(i));
? ? ? ? }
? ? ? ? while(true){
? ? ? ? ? ? System.out.println("總線程數(shù):"+executor.getPoolSize()+"當(dāng)前活躍線程數(shù):"+executor.getActiveCount());
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? TimeUnit.SECONDS.sleep(1);
? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("i="+i+" Thread = "+Thread.currentThread().getName());
? ? ? ? if(i>=1){
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? TimeUnit.SECONDS.sleep(1);
? ? ? ? ? ? ? ? System.out.println("i="+i+" sleep 1 s結(jié)束");
? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }else{
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? TimeUnit.SECONDS.sleep(3);
? ? ? ? ? ? ? ? System.out.println("i="+i+" sleep 3 s結(jié)束");
? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
設(shè)置核心線程數(shù)和非核心線程數(shù)分別為1個,隊列容量為1,進入3個runnable:

第一個創(chuàng)建主線程,第二個進入隊列,第三個則創(chuàng)建非主線程運行,

輸出結(jié)果為

i=0 Thread = pool-1-thread-1
i=2 Thread = pool-1-thread-2
總線程數(shù):2當(dāng)前活躍線程數(shù):2
總線程數(shù):2當(dāng)前活躍線程數(shù):2
i=2 sleep 1 s結(jié)束
i=1 Thread = pool-1-thread-2
總線程數(shù):2當(dāng)前活躍線程數(shù):2
總線程數(shù):2當(dāng)前活躍線程數(shù):2
i=1 sleep 1 s結(jié)束
總線程數(shù):1當(dāng)前活躍線程數(shù):1
總線程數(shù):1當(dāng)前活躍線程數(shù):1
i=0 sleep 3 s結(jié)束
總線程數(shù):1當(dāng)前活躍線程數(shù):0
可以看到非核心數(shù)線程執(zhí)行完畢之后,隊列中的task進入繼續(xù)執(zhí)行,等再次進入隊列的task結(jié)束后,可以看到總線程數(shù)減少了1,而等核心線程執(zhí)行完畢后,發(fā)現(xiàn)總線程數(shù)沒有減少,但活躍線程數(shù)減少,也就是核心線程數(shù)沒有回收。書上說的是正確的,大部分網(wǎng)上的博客說的keepAliveTime=0永久不回收是有出入的。

如果要設(shè)置核心線程的回收,則需要設(shè)置

executor.allowCoreThreadTimeOut(true);
但這是keepAliveTime必須要>0才行,否則會拋出異常!!!

throw new IllegalArgumentException("Core threads must have nonzero keep alive times");
如果看了之后覺得有問題,希望各位指點一番!!謝謝!!
————————————————
版權(quán)聲明:本文為CSDN博主「xuhangsong」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xuhangsong/article/details/89474989

總結(jié)

以上是生活随笔為你收集整理的ava线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色视频免费在线观看 | 农村妇女毛片精品久久久 | aaaa黄色 | 欧美高清性xxxxhdvideosex | 色呦呦在线观看视频 | 精品一区二区毛片 | 欧美一级二级三级 | 欧美一区二区大片 | 欧美成人精品欧美一级私黄 | 欧美一区二区三区四 | 久久影业 | 亚洲高清毛片 | 欧美大片黄色 | 天天干夜夜艹 | 国产精品av一区 | 亚洲一区二区三区国产 | 337p粉嫩大胆色噜噜狠狠图片 | 夜夜高潮夜夜爽 | 日本电影一区二区三区 | 日韩精品在线观看免费 | 不卡av免费 | 欧美成网站 | 日本在线资源 | 91丨九色丨丰满 | 黄色日b片 | 亚洲成人手机在线 | av色欲无码人妻中文字幕 | 疯狂揉花蒂控制高潮h | 天天操天天操天天操天天操天天操 | 成人毛片视频在线观看 | 欧美日韩1区2区3区 亚洲日本精品视频 | 国产成人精品免费在线观看 | 日韩黄色a级片 | 亚洲国产丝袜 | 一区二区三区高清不卡 | 99精品视频播放 | 国产绿帽一区二区三区 | 亚洲av永久无码精品国产精品 | 欧美日韩一区电影 | 微拍福利一区二区 | 国产无遮挡又黄又爽又色 | 91精品国产欧美一区二区 | 97视频一区二区三区 | 美女露胸露尿口 | 在线观看中文字幕一区 | 韩国伦理在线视频 | 日日夜夜伊人 | 亚洲一级片在线播放 | 成人深夜在线观看 | 日韩免费高清一区二区 | www.黄色网| 日本黄色激情视频 | 亚洲图片欧美 | 色噜噜在线观看 | 亚洲精品成a人在线观看 | 久久久久久久久97 | 少妇按摩一区二区三区 | 久久综合成人网 | 日本少妇bb | 欧美××××黑人××性爽 | 国产日韩精品电影 | 青青草老司机 | 日韩av中文字幕在线播放 | 日韩av在线免费 | www,色| 欧美综合第一页 | 性欧美8khd高清极品 | 一区二区福利电影 | 中文字幕av在线 | www.国产免费 | 亚洲a v网站| 老熟妇精品一区二区三区 | 三级视频网站在线观看 | 亚洲三级在线免费观看 | 亚洲伦理网 | aa在线视频| 特黄做受又粗又大又硬老头 | 亚洲精品无码久久久久久久 | 91久久人澡人人添人人爽欧美 | 亚洲日本一区二区三区 | 日本少妇一级片 | 日本熟妇色xxxxx日本免费看 | 亚洲另类一区二区 | 一区二区三区在线不卡 | 深夜视频在线免费 | 国产精品一区在线观看 | 欧美亚洲一区二区三区四区 | 亚洲欧洲无码一区二区三区 | 在线免费观看视频你懂的 | 无码人妻精品一区二区蜜桃色欲 | 美女扒开粉嫩尿口 | 国产熟女一区二区三区四区 | 绿帽在线 | 老司机午夜免费福利 | 小明看国产 | 国产女厕一区二区三区在线视 | 中文字幕av免费 | 91久久精品日日躁夜夜躁欧美 | 嫩草视频在线观看免费 |