- 相關(guān)推薦
java線(xiàn)程池框架是什么
多線(xiàn)程是程序員面試時(shí)常常會(huì )面對的問(wèn)題,對多線(xiàn)程概念的掌握和理解水平,也常常被用來(lái)衡量一個(gè)人的編程實(shí)力。不錯,普通的多線(xiàn)程已經(jīng)不容易了。以下是小編為大家搜索整理java線(xiàn)程池框架是什么,希望能給大家帶來(lái)幫助!更多精彩內容請及時(shí)關(guān)注我們應屆畢業(yè)生考試網(wǎng)!
一、線(xiàn)程池結構圖
二、示例
定義線(xiàn)程接口
6public class MyThread extends Thread {@Overridepublicvoid run() {System.out.println(Thread.currentThread().getName() + "正在執行");}}
1:newSingleThreadExecutor
10ExecutorService pool = Executors. newSingleThreadExecutor();Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();//將線(xiàn)程放入池中進(jìn)行執行pool.execute(t1);pool.execute(t2);pool.execute(t3);//關(guān)閉線(xiàn)程池pool.shutdown();
輸入結果:
3pool-1-thread-1正在執行pool-1-thread-1正在執行pool-1-thread-1正在執行
2:newFixedThreadPool
13ExecutorService pool = Executors.newFixedThreadPool(3);Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();Thread t4 = new MyThread();Thread t5 = new MyThread();//將線(xiàn)程放入池中進(jìn)行執行pool.execute(t1);pool.execute(t2);pool.execute(t3);pool.execute(t4);pool.execute(t5);pool.shutdown();
輸入結果:
4pool-1-thread-1正在執行pool-1-thread-2正在執行pool-1-thread-1正在執行pool-1-thread-2正在執行
3 :newCachedThreadPool
14ExecutorService pool = Executors.newCachedThreadPool();Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();Thread t4 = new MyThread();Thread t5 = new MyThread();//將線(xiàn)程放入池中進(jìn)行執行pool.execute(t1);pool.execute(t2);pool.execute(t3);pool.execute(t4);pool.execute(t5);//關(guān)閉線(xiàn)程池pool.shutdown();
輸入結果:
5pool-1-thread-2正在執行pool-1-thread-4正在執行pool-1-thread-3正在執行pool-1-thread-1正在執行pool-1-thread-5正在執行
4 :ScheduledThreadPoolExecutor
14ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);pool.scheduleAtFixedRate(new Runnable() {//每隔一段時(shí)間就觸發(fā)異常 @Override public void run() { //throw new RuntimeException(); System.out.println("================"); }}, 1000, 2000, TimeUnit.MILLISECONDS);pool.scheduleAtFixedRate(new Runnable() {//每隔一段時(shí)間打印系統時(shí)間,證明兩者是互不影響的 @Override public void run() { System.out.println("+++++++++++++++++"); }}, 1000, 2000, TimeUnit.MILLISECONDS);
輸入結果:
4================+++++++++++++++++++++++++++++++++++++++++++++++++++
三、線(xiàn)程池核心參數
corePoolSize : 池中核心的線(xiàn)程數
maximumPoolSize : 池中允許的最大線(xiàn)程數。
keepAliveTime : 當線(xiàn)程數大于核心時(shí),此為終止前多余的空閑線(xiàn)程等待新任務(wù)的最長(cháng)時(shí)間。
unit : keepAliveTime 參數的時(shí)間單位。
workQueue : 執行前用于保持任務(wù)的隊列。此隊列僅保持由 execute方法提交的 Runnable任務(wù)。
threadFactory : 執行程序創(chuàng )建新線(xiàn)程時(shí)使用的工廠(chǎng)。
handler : 由于超出線(xiàn)程范圍和隊列容量而使執行被阻塞時(shí)所使用的處理程序。
ThreadPoolExecutor :Executors類(lèi)的底層實(shí)現。
3.1 任務(wù)排隊機制
SynchonousQueue: 同步隊列,隊列直接提交給線(xiàn)程執行而不保持它們,此時(shí)線(xiàn)程池通常是無(wú)界的
LinkedBlockingQueue: 無(wú)界對列,當線(xiàn)程池線(xiàn)程數達到最大數量時(shí),新任務(wù)就會(huì )在隊列中等待執行,可能會(huì )造成隊列無(wú)限膨脹
ArrayBlockingQueue : 有界隊列,有助于防止資源耗盡,一旦達到上限,可能會(huì )造成新任務(wù)丟失
注意:
newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue
newCachedThreadPool 使用的是 SynchonousQueue
newScheduledThreadPool使用的是 DelayedWorkQueue
3.2 線(xiàn)程執行流程
3.3 線(xiàn)程大小確定:
cpu密集型: 盡量少開(kāi)線(xiàn)程,最佳線(xiàn)程數 Ncpu+1
io密集型:多開(kāi)線(xiàn)程,2Ncpu
混合型:根據情況而定,可以拆分成io密集和cou密集
【java線(xiàn)程池框架是什么】相關(guān)文章:
什么是java線(xiàn)程池框架10-02
java線(xiàn)程池框架解析09-11
java線(xiàn)程池框架解析方法10-13
Java 5線(xiàn)程池使用07-28
java中通用的線(xiàn)程池實(shí)例代碼08-27
java主線(xiàn)程是什么05-20
java的多線(xiàn)程09-09
java多線(xiàn)程08-31