使用 ThreadPoolExecutor 建立多執行緒工具類
import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class ThreadPoolUtils { private ThreadPoolExecutor pool = null; static Integer num = 0; /** * 獲取CPU核數 */ private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors(); private static final int MAXIMUM_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 5; /** * 阻塞佇列大小 */ private static final int MAX_TASK_SIZE = Integer.MAX_VALUE; /** * IO密集執行緒池配置 * @return */ public ThreadPoolExecutor getIOInstance( ){ return getNewInstance(CORE_POOL_SIZE * 2 + 1 , MAXIMUM_POOL_SIZE,"IO",MAX_TASK_SIZE); } /** * CUP密集執行緒池配置 * @return */ public ThreadPoolExecutor getCUPInstance( ){ return getNewInstance(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE,"CUP",MAX_TASK_SIZE); } /** * 獲取物件 * @param corePoolSize 核心執行緒數量 * @param poolName 執行緒池名稱 * @param maxThreadSize 最大執行緒數 * @param maxTaskSize 最大阻塞任務數 * @return */ public ThreadPoolExecutor getNewInstance(int corePoolSize,int maxThreadSize,String poolName,int maxTaskSize){ pool = createPool(corePoolSize,maxThreadSize,poolName,maxTaskSize); if(pool==null){ throw new NullPointerException(); }else{ return pool; } } /** * 建立執行緒池 * @param corePoolSize 核心執行緒數量 * @param poolName 執行緒池名稱 * @param maxThreadSize 最大執行緒數 * @param maxTaskSize 最大阻塞任務數 * @return */ private ThreadPoolExecutor createPool(int corePoolSize,int maxThreadSize,String poolName,int maxTaskSize){ return new ThreadPoolExecutor(corePoolSize,maxThreadSize,0, TimeUnit.SECONDS,new LinkedBlockingQueue<>(maxTaskSize), new CustomThreadFactory(poolName), new RejectedExecutionHandlerImpl()); } /** * 執行緒工廠 * 給執行緒命名 */ private class CustomThreadFactory implements ThreadFactory { private final String poolName; public CustomThreadFactory(String poolName){ this.poolName = poolName; } private AtomicInteger count = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); String nowThreadName = ""; nowThreadName = poolName + count.addAndGet(1); t.setName(nowThreadName); return t; } } /** * 自定義拒絕策略 */ private class RejectedExecutionHandlerImpl implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { try{ System.out.println("重回佇列"); executor.getQueue().put(r); }catch (Exception e){ } } } public static void main(String[] args){ ThreadPoolExecutor executor = new ThreadPoolUtils().getNewInstance(3,8,"test",5); for (int i = 0;i<20;i++){ System.out.println("提交第"+i+"個任務"); executor.execute(()->{ try { System.out.println(Thread.currentThread().getName()); TimeUnit.SECONDS.sleep(10); synchronized (num){ System.out.println("數字為:"+num++); } } catch (InterruptedException e) { e.printStackTrace(); } }); System.out.println("提交第"+i+"個任務成功"); } System.out.println("結束"); } }
相關文章
- java多執行緒系列:ThreadPoolExecutorJava執行緒thread
- 使用 Executors,ThreadPoolExecutor,建立執行緒池,原始碼分析理解thread執行緒原始碼
- 多執行緒(三)、執行緒池 ThreadPoolExecutor 知識點總結執行緒thread
- Java多執行緒Thread類使用Java執行緒thread
- 如何讓ThreadPoolExecutor更早地建立非核心執行緒thread執行緒
- Java多執行緒同步工具類之SemaphoreJava執行緒
- Java多執行緒同步工具類之CyclicBarrierJava執行緒
- Java多執行緒同步工具類之CountDownLatchJava執行緒CountDownLatch
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Java執行緒池之ThreadPoolExecutorJava執行緒thread
- ThreadPoolExecutor執行緒池的keepAliveTimethread執行緒
- 併發工具類(一)等待多執行緒的CountDownLatch執行緒CountDownLatch
- java多執行緒與併發 - 併發工具類Java執行緒
- 【重學Java】多執行緒進階(執行緒池、原子性、併發工具類)Java執行緒
- Java併發 之 執行緒池系列 (2) 使用ThreadPoolExecutor構造執行緒池Java執行緒thread
- Java多執行緒-執行緒池的使用Java執行緒
- 【java學習】ThreadPoolExecutor 執行緒池Javathread執行緒
- 執行緒池ThreadPoolExecutor實現原理執行緒thread
- Java併發——執行緒池ThreadPoolExecutorJava執行緒thread
- 使用委託開啟多執行緒(多執行緒深入)執行緒
- 多執行緒系列(十五) -常用併發工具類詳解執行緒
- 併發系列(一)——執行緒池原始碼(ThreadPoolExecutor類)簡析執行緒原始碼thread
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- 使用CreateThreadPool建立執行緒池thread執行緒
- java使用多執行緒Java執行緒
- java多執行緒之Thread類Java執行緒thread
- JAVA重點類 多執行緒Java執行緒
- Java多執行緒(二):Thread類Java執行緒thread
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- java多執行緒之執行緒的基本使用Java執行緒
- 9.1 運用API建立多執行緒API執行緒
- 多執行緒的建立 兩種方式以及使用建議執行緒
- Java原始碼解析 ThreadPoolExecutor 執行緒池Java原始碼thread執行緒
- Java原始碼解析 - ThreadPoolExecutor 執行緒池Java原始碼thread執行緒
- 深入淺出Java執行緒池ThreadPoolExecutorJava執行緒thread
- Java執行緒池ThreadPoolExecutor原始碼解析Java執行緒thread原始碼
- 詳解 JUC 執行緒池中的 ThreadPoolExecutor執行緒thread