婷婷丁香激情五月,女老师电影全集免费看,天天五月天,九九视频这里只有精品,九九福利视频,聊斋艳谭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

主站蜘蛛池模板: 精品一区二区视频 | 日韩精品久久久久影院 | 国产麻豆精品一区二区 | 色5月婷婷| 99v视频国产在线观看免费 | 色无五月 | 国产在线一区二区视频 | 免费看羞羞视频的网站 | 日韩精品第二页 | 国产一区二区三区免费大片天美 | 国产精品视频你懂的 | 伊人国产在线观看 | 欧美日韩亚洲综合 | 色视频免费在线观看 | 永久免费毛片 | 久久亚洲精品tv | 激情婷婷六月天 | 四虎啪啪 | 欧美爱爱小视频 | 久久国产经典视频 | 九九99久久 | 日韩欧美色综合 | 九九九国产在线 | 2020国产成人久久精品 | 五月婷六月 | 九九精品在线观看 | 精品免费一区二区三区 | 日韩中文字幕久久精品 | 99视频国产精品免费观看app | 奇米影视第4色 | 日韩欧美~中文字幕 | 97青草最新免费精品视频 | 夜夜骑狠狠干 | 九九精品成人免费国产片 | 免费一级网站 | 欧美综合自拍亚洲综合百度 | 韩国电影迷人的保姆 | 精品999久久久久久中文字幕 | 欧美亚洲激情视频 | 东方伊人免费在线观看 | 国产成人亚洲精品大帝 |