大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 javase基礎入門教程之線程池的幾種應用場景

javase基礎入門教程之線程池的幾種應用場景

更新時間:2020-07-17 16:12:41 來源:動力節點 瀏覽2713次

線程是程序開發的基礎,在平時的開發中也是必不可少的,特別是對多線程和線程池都會經常運用到。今天給大家介紹java中幾種常用的線程池,并了解每一種線程池的應用場景。

線程使用的demo

public?static?void?cache()?{
????????ExecutorService?pool?=?Executors.newCachedThreadPool();
????????long?start?=?System.currentTimeMillis();
????????pool.execute(()?->?{
????????????int?sum?=?0;
????????????for?(int?i?=?0;?i?<?10;?i++)?{
????????????????sum?=?(int)?Math.sqrt(i?*?i?-?1?+?i);
????????????????System.out.println(sum);
????????????}
????????});
????????System.out.println("cache:?"?+?(System.currentTimeMillis()?-?start));
????}

newCachedThreadPool

重用之前的線程

適合執行許多短期異步任務的程序。

調用execute()將重用以前構造的線程

如果沒有可用的線程,則創建一個新線程并添加到池中

默認為60s未使用就被終止和移除

長期閑置的池將會不消耗任何資源

源碼:

public?static?ExecutorService?newCachedThreadPool()?{
????????return?new?ThreadPoolExecutor(0,?Integer.MAX_VALUE,
??????????????????????????????????????60L,?TimeUnit.SECONDS,
??????????????????????????????????????new?SynchronousQueue());
????}

通過源碼可以看出底層調用的是ThreadPoolExecutor方法,傳入一個同步的阻塞隊列實現緩存。

下面說一下ThreadPoolExecutor

public?ThreadPoolExecutor(int?corePoolSize,
??????????????????????????????int?maximumPoolSize,
??????????????????????????????long?keepAliveTime,
??????????????????????????????TimeUnit?unit,
??????????????????????????????BlockingQueue?workQueue)?{
????????this(corePoolSize,?maximumPoolSize,?keepAliveTime,?unit,?workQueue,
?????????????Executors.defaultThreadFactory(),?defaultHandler);
????}

通過源碼可以看出,我們可以傳入線程池的核心線程數(最小線程數),最大線程數量,保持時間,時間單位,阻塞隊列這些參數,最大線程數設置為jvm可用的cpu數量為最佳實踐

newWorkStealingPool

獲取當前可用的線程數量進行創建作為并行級別

使用ForkJoinPool

源碼:

public?static?ExecutorService?newWorkStealingPool()?{
????????return?new?ForkJoinPool
????????????(Runtime.getRuntime().availableProcessors(),
?????????????ForkJoinPool.defaultForkJoinWorkerThreadFactory,
?????????????null,?true);
????}

通過源碼可以看出底層調用的是ForkJoinPool線程池

下面說一下ForkJoinPool

public?ForkJoinPool(int?parallelism,
????????????????????????ForkJoinWorkerThreadFactory?factory,
????????????????????????UncaughtExceptionHandler?handler,
????????????????????????boolean?asyncMode)?{
????????this(checkParallelism(parallelism),
?????????????checkFactory(factory),
?????????????handler,
?????????????asyncMode???FIFO_QUEUE?:?LIFO_QUEUE,
?????????????"ForkJoinPool-"?+?nextPoolId()?+?"-worker-");
????????checkPermission();
????}

使用一個無限隊列來保存需要執行的任務,可以傳入線程的數量,不傳入,則默認使用當前計算機中可用的cpu數量,使用分治法來解決問題,使用fork()和join()來進行調用。

以上就是動力節點java培訓機構的小編針對“javase基礎入門教程之線程池的幾種應用場景”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日产精品一二三四区国产 | 国产一区二区三区播放 | 成人在线视频一区 | 亚洲欧美一区二区三区在线播放 | 国产精品婷婷久青青原 | 天天干在线影院 | 女人寂寞偷人视频a级 | 真人午夜a一级毛片 | 日日夜夜摸 | 美女被爆羞羞视频网站视频 | 99久久精品免费看国产情侣 | 综合色婷婷 | 国产中文字幕第一页 | 天天夜夜爽| 国产精品揄拍100视频 | 青青青手机版视频在线观看 | 日本欧洲亚洲一区在线观看 | 国产精品成人扳一级aa毛片 | 亚1洲二区三区四区免费 | 亚洲qingse中文久久网 | 一级片视频免费看 | 久久精品国产一区二区小说 | 亚洲免费视频一区二区三区 | 国产免费一级精品视频 | 奇米影视狠狠狠天天777 | 日本视频中文字幕一区二区 | 日韩欧美在线一级一中文字暮 | 国内精品久久久久久久久久久久 | 亚洲精品一区二区乱码在线观看 | 亚洲精品色播一区二区 | 亚洲免费在线视频播放 | 91精品国产爱久久久久 | 亚洲精彩视频在线观看 | 久久久成人影院 | 真实国产乱弄免费视频 | 内衣办公室动漫久久影院 | 欧美毛片又粗又长又大 | 色综合天天综久久久噜噜噜久久〔 | 国产精品福利在线观看免费不卡 | 好男人午夜影院 | 亚洲欧洲高清 |