婷婷丁香激情五月,女老师电影全集免费看,天天五月天,九九视频这里只有精品,九九福利视频,聊斋艳谭8陆判性水仙

白云一鍵重裝系統2025 最簡單好用的系統重裝軟件 全網獨家技術/支持GPT-UEFI一鍵裝機 完美兼容市面所有主板 支持安裝windows XP/7/8/10/11 系統

當前位置:主頁 > 系統幫助 > 向大家介紹Java的四種線程池的使用方法

向大家介紹Java的四種線程池的使用方法

2017-09-09 14:38:47 分類:幫助
Java線程池有很多好處,比如節省創建和銷毀線程時間,節省系統資源開銷,處理比較多的東西時也可以使用線程池,但是Java線程池有很多用戶不會使用,所以小編在此給大家介紹一下Java的四種線程池使用方法的教程。
線程池是什么東西?
線程池是一種多線程處理形式,處理過程中將任務添加到隊列,然后在創建線程后自動啟動這些任務。線程池線程都是后臺線程。每個線程都使用默認的堆棧大小,以默認的優先級運行,并處于多線程單元中。如果某個線程在托管代碼中空閑(如正在等待某個事件),則線程池將插入另一個輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間后創建另一個輔助線程但線程的數目永遠不會超過最大值。超過最大值的線程可以排隊,但他們要等到其他線程完成后才啟動。
Java四種線程池的使用方法:
Java通過Executors提供四種線程池,分別為:
newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
newFixedThreadPool 創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。
newScheduledThreadPool 創建一個定長線程池,支持定時及周期性任務執行。
newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。
(1) newCachedThreadPool
創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。示例代碼如下:
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int index = i;
try {
Thread.sleep(index * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
cachedThreadPool.execute(new Runnable() {
public void run() {
System.out.println(index);
}
});
}
}
}
線程池為無限大,當執行第二個任務時第一個任務已經完成,會復用執行第一個任務的線程,而不用每次新建線程。
(2) newFixedThreadPool
創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。示例代碼如下:
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
final int index = i;
fixedThreadPool.execute(new Runnable() {
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
因為線程池大小為3,每個任務輸出index后sleep 2秒,所以每兩秒打印3個數字。
定長線程池的大小最好根據系統資源進行設置。如Runtime.getRuntime().availableProcessors()
(3) newScheduledThreadPool
創建一個定長線程池,支持定時及周期性任務執行。延遲執行示例代碼如下:
package test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
}
}
表示延遲3秒執行。
定期執行示例代碼如下:
package test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("delay 1 seconds, and excute every 3 seconds");
}
}, 1, 3, TimeUnit.SECONDS);
}
}
表示延遲1秒后每3秒執行一次。
(4) newSingleThreadExecutor
創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。示例代碼如下:
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int index = i;
singleThreadExecutor.execute(new Runnable() {
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
結果依次輸出,相當于順序執行各個任務。
你可以使用JDK自帶的監控工具來監控我們創建的線程數量,運行一個不終止的線程,創建指定量的線程,來觀察:
工具目錄:C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe
運行程序做稍微修改:
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService singleThreadExecutor = Executors.newCachedThreadPool();
for (int i = 0; i < 100; i++) {
final int index = i;
singleThreadExecutor.execute(new Runnable() {
public void run() {
try {
while(true) {
System.out.println(index);
Thread.sleep(10 * 1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
效果如下:

介紹Java的四種線程池的使用方法步驟

選擇我們運行的程序:

介紹Java的四種線程池的使用方法步驟

監控運行狀態
以上就是小編向大家介紹Java的四種線程池的使用方法,掌握了線程池的使用方法之后我們操作起Java來就更加的效率了,更多相關教程請繼續關注白云幫助中心
標簽: 系統教程
重裝系統幫助
U盤裝系統
優白云U盤裝系統

聯系我們 | 關于我們 | 網站地圖 | 白云一鍵重裝系統QQ群

提供一鍵重裝系統win7旗艦版,一鍵重裝xp系統,以及重裝win10專業版的重裝系統軟件以及系統重裝的相關教程
Copyright@2019-2024白云系統 版權所有. All Rights Reserved. ?備案號:粵ICP備20000429號
白云一鍵重裝系統唯一網址:www.8e8u.cn

主站蜘蛛池模板: 99视频在线观看视频 | 国产成人高清亚洲一区久久 | 啪啪网站色大全免费 | 福利二区视频 | 丁香花五月婷婷开心 | 999久久久免费精品国产牛牛 | 日本国产一区在线观看 | 我爱52av好色 | 短视频网站免费观看 | 四虎影视精品永久免费网站 | 久久久久国产精品免费 | 国产精品成人一区二区1 | 国产福利一区二区三区 | 国产欧美va欧美va香蕉在线观看 | 欧美色第一页 | 久久福利免费视频 | 久久毛片免费看一区二区三区 | 国产青草 | 久久国| 婷婷激情综合五月天 | 99精品国内不卡在线观看 | 五月婷婷综合激情网 | 开心久久婷婷综合中文字幕 | aⅴ一区二区三区 | 99爱色| 久久国产精品高清一区二区三区 | 国产精品久久现线拍久青草 | 国产欧美性综合视频性刺激 | a国产| 久久免费观看国产99精品 | 亚洲永久免费视频 | 日韩免费看片 | 成人看毛片 | 奇米影视第四色在线 | 视频黄色在线 | 国产成人亚洲欧美电影 | 色噜噜狠狠在爱丁香 | 四虎影永久在线观看网址 | 欧洲成人在线观看 | 欧美色视频日本 | 日产国语一区二区三区在线看 |