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

主站蜘蛛池模板: 色系视频在线观看免费观看 | 九九久久亚洲综合久久久 | 一级片在线视频 | 欧美草比视频 | 国产视频视频 | 日本一区二区三区久久 | 另类在线视频 | 高清免费毛片 | 2021在线永久免费视频 | 乱人伦视频69 | 婷婷色六月 | 久久瑟瑟 | 你懂的在线观看视频 | 奇米影视第四影院在线观看 | 国产精品久久久久久久 | 丁香花在线影院在线播放 | 一级毛片免费视频网站 | 高清性色生活片欧美在线 | 婷婷看片| 国产精品久久久久久久久久久威 | 99视频有精品视频免费观看 | run away无删减全集 动漫 | 国产精品999 | 日韩精品欧美视频 | www.com黄色| 久久国产精品国产精品 | 99热这里精品 | 久久国产精品夜色 | 久久亚洲精品人成综合网 | 四虎精品免费视频 | 男人私人影院免费看视频 | 国产精品四虎在线观看免费 | 久久九九亚洲精品 | 欧美日韩性视频 | 精品国产福利 | 欧美午夜视频一区二区 | 欧美视频一区在线观看 | 99成人国产精品视频 | 日韩视频欧美视频 | 奇米影视网 | 五月花成人网 |