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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java四种线程池的使用

發布時間:2023/12/9 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java四种线程池的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FixedThreadPool

由Executors的newFixedThreadPool方法創建。它是一種線程數量固定的線程池,當線程處于空閑狀態時,他們并不會被回收,除非線程池被關閉。當所有的線程都處于活動狀態時,新的任務都會處于等待狀態,直到有線程空閑出來。FixedThreadPool只有核心線程,且該核心線程都不會被回收,這意味著它可以更快地響應外界的請求。
FixedThreadPool沒有額外線程,只存在核心線程,而且核心線程沒有超時機制,而且任務隊列沒有長度的限制。

public class ThreadPoolExecutorTest {public static void main(String[] args) {ExecutorService fixedThreadPool =Executors. newFixedThreadPool(3);for (int i =1; i<=5;i++){final int index=i ;fixedThreadPool.execute(new Runnable(){@Overridepublic void run() {try {System.out.println("第" +index + "個線程" +Thread.currentThread().getName());Thread.sleep(1000);} catch(InterruptedException e ) {e .printStackTrace();}}});}} }

CachedThreadPool

由Executors的newCachedThreadPool方法創建,不存在核心線程,只存在數量不定的非核心線程,而且其數量最大值為Integer.MAX_VALUE。當線程池中的線程都處于活動時(全滿),線程池會創建新的線程來處理新的任務,否則就會利用新的線程來處理新的任務,線程池中的空閑線程都有超時機制,默認超時時長為60s,超過60s的空閑線程就會被回收。和FixedThreadPool不同的是,CachedThreadPool的任務隊列其實相當于一個空的集合,這將導致任何任務都會被執行,因為在這種場景下SynchronousQueue是不能插入任務的,SynchronousQueue是一個特殊的隊列,在很多情況下可以理解為一個無法儲存元素的隊列。從CachedThreadPool的特性看,這類線程比較適合執行大量耗時較小的任務。當整個線程池都處于閑置狀態時,線程池中的線程都會因為超時而被停止回收,幾乎是不占任何系統資源。

ScheduledThreadPool

通過Executors的newScheduledThreadPool方式創建,核心線程數量是固定的,而非核心線程是沒有限制的,并且當非核心線程閑置時它會被立即回收,ScheduledThreadPool這類線程池主要用于執行定時任務和具有固定時期的重復任務。
延遲:

public class ThreadPoolExecutorTest { public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); scheduledThreadPool.schedule(newRunnable(){ @Overridepublic void run() {System.out.println("延遲三秒");}}, 3, TimeUnit.SECONDS);} }

定時:

public class ThreadPoolExecutorTest { public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); scheduledThreadPool.scheduleAtFixedRate(newRunnable(){ @Override public void run() {System.out.println("延遲1秒后每三秒執行一次");}},1,3,TimeUnit.SECONDS);}}

SingleThreadExecutor

通過Executors的newSingleThreadExecutor方法來創建。這類線程池內部只有一個核心線程,它確保所有的任務都在同一個線程中按順序執行。SingleThreadExecutor的意義在于統一所有外界任務一個線程中,這使得這些任務之間不需要處理線程同步的問題

總結

以上是生活随笔為你收集整理的Java四种线程池的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。