摘要:系統預定了幾個線程池,不過建議手動創建,以防止錯誤創建消耗資源,比如創建太多線程或者固定線程數量,無界隊列固定線程數量,數量為,無界隊列,會按順序執行不限制線程數量,使用隊列,使用于短任務基于用于周期性執行任務示例第一個是,第二個是第一
系統預定了幾個線程池,不過建議手動創建,以防止錯誤創建消耗資源,比如創建太多線程或者OOM
FixedThreadPool固定線程數量,無界隊列
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueueSingleThreadExecutor()); }
固定線程數量,數量為1,無界隊列,會按順序執行
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueueCachedThreadPool())); }
不限制線程數量,使用SynchronousQueue隊列,使用于短任務
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueueWorkStealingPool()); }
基于ForkJoinPool
public static ExecutorService newWorkStealingPool(int parallelism) { return new ForkJoinPool (parallelism, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true); }ScheduledThreadPoolExecutor
用于周期性執行任務
public static ScheduledExecutorService newSingleThreadScheduledExecutor() { return new DelegatedScheduledExecutorService (new ScheduledThreadPoolExecutor(1)); }示例
public class ScheduledDemo { static class Thread1 implements Runnable { @Override public void run() { SimpleDateFormat formater = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); System.out.println(Thread.currentThread().getName() + ":" + formater.format(new Date())); } } public static void main(String[] args) { ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1); //第一個是Runnable,第二個是第一次開始的時間,第三個是周期時間,第四個是時間單位 schedule.scheduleAtFixedRate(new Thread1(),1000,1000, TimeUnit.MILLISECONDS); } }
運行結果如下:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75723.html
摘要:是所有線程池實現的父類,我們先看看構造函數構造參數線程核心數最大線程數線程空閑后,存活的時間,只有線程數大于的時候生效存活時間的單位任務的阻塞隊列創建線程的工程,給線程起名字當線程池滿了,選擇新加入的任務應該使用什么策略,比如拋異常丟棄當前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實現的父類,我們先看看構造函數 構造參數 corePool...
摘要:接口用于提交任務接口繼承了接口設置線程的狀態,還沒執行的線程會被中斷設置線程的狀態,嘗試停止正在進行的線程當調用或方法后返回為當調用方法后,并且所有提交的任務完成后返回為當調用方法后,成功停止后返回為當前線程阻塞,直到線程執行完時間到被中斷 Executor接口 void execute(Runnable command)//用于提交command任務 ExecutorService接...
摘要:抽象類,實現了的接口。將任務封裝成提交任務主要方法在任務是否超時超時時間任務書用于存放結果的,先完成的放前面。 AbstractExecutorService抽象類,實現了ExecutorService的接口。 newTaskFor 將任務封裝成FutureTask protected RunnableFuture newTaskFor(Runnable runnable, T va...
摘要:定義等待該線程終止,比如線程調用了線程的,那么線程要等到線程執行完后,才可以繼續執行。 定義 等待該線程終止,比如A線程調用了B線程的join,那么A線程要等到B線程執行完后,才可以繼續執行。 示例 public class JoinDemo { static class JoinThread1 implements Runnable { Thread thre...
摘要:并且,線程池在某些情況下還能動態調整工作線程的數量,以平衡資源消耗和工作效率。同時線程池還提供了對池中工作線程進行統一的管理的相關方法。 開發中經常會遇到各種池(如:連接池,線程池),它們的作用就是為了提高性能及減少開銷,在JDK1.5以后的java.util.concurrent包中內置了很多不同使用場景的線程池,為了更好的理解它們,自己手寫一個線程池,加深印象。 概述 1.什么是...
閱讀 2621·2021-11-25 09:43
閱讀 2725·2021-11-04 16:09
閱讀 1634·2021-10-12 10:13
閱讀 881·2021-09-29 09:35
閱讀 880·2021-08-03 14:03
閱讀 1777·2019-08-30 15:55
閱讀 2989·2019-08-28 18:14
閱讀 3489·2019-08-26 13:43