本文主要介紹了Java 執行緒池框架的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
一、線程池結構圖
二、範例
1:newSingleThreadExecutorpublic class MyThread extends Thread { @Override publicvoid run() { System.out.println(Thread.currentThread().getName() + "正在执行"); } }
輸入結果:
ExecutorService pool = Executors. newSingleThreadExecutor(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); //关闭线程池 pool.shutdown();輸入結果:
pool-1-thread-1正在执行 pool-1-thread-1正在执行 pool-1-thread-1正在执行
3 : newCachedThreadPool
ExecutorService pool = Executors.newFixedThreadPool(3); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); pool.shutdown();輸入結果:
pool-1-thread-1正在执行 pool-1-thread-2正在执行 pool-1-thread-1正在执行 pool-1-thread-2正在执行
輸入結果:
ExecutorService pool = Executors.newCachedThreadPool(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //关闭线程池 pool.shutdown();
三、執行緒池核心參數
corePoolSize : 池中核心的執行緒數maximumPoolSize : 池中允許的最大執行緒數。 keepAliveTime : 當執行緒數大於核心時,此為終止前多餘的空閒執行緒等待新任務的最長時間。unit : keepAliveTime 參數的時間單位。 workQueue : 執行前用於保持任務的佇列。此佇列僅保持由 execute方法提交的 Runnable任務。
threadFactory : 執行程式建立新執行緒時使用的工廠。 handler : 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序。 ThreadPoolExecutor :Executors類別的底層實作。 3.1 任務排隊機制SynchonousQueue: 同步佇列,佇列直接提交給執行緒執行而不保持它們,此時執行緒池通常是無界的執行緒界對列數最大數量時,新任務就會在隊列中等待執行,可能會造成隊列無限膨脹
ArrayBlockingQueue : 有界隊列,有助於防止資源耗盡,一旦達到上限,可能會造成新任務丟失 注意: newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueuenewCachedThreadPool 使用的是SynchonousQueuenewCachedThreadPool 使用的是SynchonousQueue.執行流程
3.3 執行緒大小決定:
cpu密集型: 盡量少開線程,最佳線程數Ncpu+1io密集型:多開線程,2Ncpu
混合型:根據情況而定,可以拆分成io密集和cou密集 更多Java 執行緒池框架相關文章請關注PHP中文網!