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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

Executors创建的4种线程池的使用

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Executors创建的4种线程池的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java通過(guò)Executors提供四種線程池,分別為:
newCachedThreadPool創(chuàng)建一個(gè)可緩存線程池,如果線程池長(zhǎng)度超過(guò)處理需要,可靈活回收空閑線程,若無(wú)可回收,則新建線程。
newFixedThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,可控制線程最大并發(fā)數(shù),超出的線程會(huì)在隊(duì)列中等待。
newScheduledThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,支持定時(shí)及周期性任務(wù)執(zhí)行。
newSingleThreadExecutor 創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級(jí))執(zhí)行。

注意:線程池只是為了控制應(yīng)用中處理某項(xiàng)業(yè)務(wù)中防止高并發(fā)問(wèn)題帶來(lái)的線程不安全的發(fā)生的概率。在我目前的測(cè)試用,還沒(méi)有發(fā)現(xiàn)線程可以重用這個(gè)概念,因?yàn)榫€程開啟后,用完就關(guān)閉了,不可以再次開啟的,查看源碼發(fā)現(xiàn)會(huì)每次新創(chuàng)建一個(gè)線程用來(lái)處理業(yè)務(wù)。我們可以通過(guò)線程池指定處理這項(xiàng)業(yè)務(wù)最大的同步線程數(shù),比如:Executors.newFixedThreadPool(3);在線程池中保持三個(gè)線程可以同時(shí)執(zhí)行,但是注意,并不是說(shuō)線程池中永遠(yuǎn)都是這三個(gè)線程,只是說(shuō)可以同時(shí)存在的線程數(shù),當(dāng)某個(gè)線程執(zhí)行結(jié)束后,會(huì)有新的線程進(jìn)來(lái)。newFixedThreadPool.execute(new?ThreadForpools());這句話的含義并不是添加新的線程,而是添加新的處理業(yè)務(wù)請(qǐng)求進(jìn)來(lái)。至少我當(dāng)前是這么理解的,沒(méi)有發(fā)現(xiàn)線程可以重復(fù)使用。

處理線程代碼:

package com.alivn.sockets; /*** Created by Alivn on 2017/3/19.*/ public class ThreadForpools implements Runnable{private Integer index;public ThreadForpools(Integer index){this.index=index;}@Overridepublic void run() {/**** 業(yè)務(wù)......省略*/try {System.out.println("開始處理線程!!!");Thread.sleep(index*100);System.out.println("我的線程標(biāo)識(shí)是:"+this.toString());} catch (InterruptedException e) {e.printStackTrace();}} }

(1) newCachedThreadPool
創(chuàng)建一個(gè)可緩存線程池,應(yīng)用中存在的線程數(shù)可以無(wú)限大

示例代碼如下:

package com.alivn.sockets; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /*** Created by Alivn on 2017/3/19.*/ public class Threadpools {/*** 我們獲取四次次線程,觀察4個(gè)線程地址* @param args*/public static void main(String[]args){ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();System.out.println("****************************newCachedThreadPool*******************************");for(int i=0;i<4;i++){final int index=i;newCachedThreadPool.execute(new ThreadForpools(index));}} }

輸出結(jié)果是:可以有無(wú)限大的線程數(shù)進(jìn)來(lái)(線程地址不一樣)

(2) newFixedThreadPool
創(chuàng)建一個(gè)定長(zhǎng)線程池,可控制線程最大并發(fā)數(shù),超出的線程會(huì)在隊(duì)列中等待。示例代碼如下:

package com.alivn.sockets; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /*** Created by Alivn on 2017/3/19.*/ public class Threadpools {/*** 我們獲取四次次線程,觀察4個(gè)線程地址* @param args*/public static void main(String[]args){//線程池允許同時(shí)存在兩個(gè)線程ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);System.out.println("****************************newFixedThreadPool*******************************");for(int i=0;i<4;i++){final int index=i;newFixedThreadPool.execute(new ThreadForpools(index));}} }

輸出結(jié)果:每次只有兩個(gè)線程在處理,當(dāng)?shù)谝粋€(gè)線程執(zhí)行完畢后,新的線程進(jìn)來(lái)開始處理(線程地址不一樣)

?

(3)? newScheduledThreadPool
創(chuàng)建一個(gè)定長(zhǎng)線程池,支持定時(shí)及周期性任務(wù)執(zhí)行。延遲執(zhí)行示例代碼如下:

package com.alivn.sockets; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;/*** Created by Alivn on 2017/3/19.*/ public class Threadpools {/*** 我們獲取四次次線程,觀察4個(gè)線程地址* @param args*/public static void main(String[]args){ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);System.out.println("****************************newFixedThreadPool*******************************");for(int i=0;i<4;i++){final int index=i;//延遲三秒執(zhí)行newScheduledThreadPool.schedule(new ThreadForpools(index),3, TimeUnit.SECONDS);}} }

執(zhí)行結(jié)果:延遲三秒之后執(zhí)行,除了延遲執(zhí)行之外和newFixedThreadPool基本相同,可以用來(lái)執(zhí)行定時(shí)任務(wù)

4) newSingleThreadExecutor
創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級(jí))執(zhí)行。示例代碼如下:

package com.alivn.sockets; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;/*** Created by Alivn on 2017/3/19.*/ public class Threadpools {/*** 我們獲取四次次線程,觀察4個(gè)線程地址* @param args*/public static void main(String[]args){ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();System.out.println("****************************newFixedThreadPool*******************************");for(int i=0;i<4;i++){final int index=i;newSingleThreadExecutor.execute(new ThreadForpools(index));}} }

?

執(zhí)行結(jié)果:只存在一個(gè)線程,順序執(zhí)行

from:?https://www.cnblogs.com/ljp-sun/p/6580147.html?

總結(jié)

以上是生活随笔為你收集整理的Executors创建的4种线程池的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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