中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一文帶你讀懂Java 線程池框架

發布時間:2020-11-09 17:16:29 來源:億速云 閱讀:165 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關一文帶你讀懂Java 線程池框架,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、線程池結構圖

一文帶你讀懂Java 線程池框架

二、示例

定義線程接口

public class MyThread extends Thread {
 @Override
 publicvoid run() {
 System.out.println(Thread.currentThread().getName() + "正在執行");
 }
}

1:newSingleThreadExecutor

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正在執行

2:newFixedThreadPool

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正在執行

3 :newCachedThreadPool

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();

輸入結果:

pool-1-thread-2正在執行
pool-1-thread-4正在執行
pool-1-thread-3正在執行
pool-1-thread-1正在執行
pool-1-thread-5正在執行

4 :ScheduledThreadPoolExecutor

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段時間就觸發異常
  @Override
  public void run() {
   //throw new RuntimeException();
   System.out.println("================");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段時間打印系統時間,證明兩者是互不影響的
  @Override
  public void run() {
   System.out.println("+++++++++++++++++");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);

輸入結果:

================
+++++++++++++++++
+++++++++++++++++
+++++++++++++++++

三、線程池核心參數

corePoolSize : 池中核心的線程數

maximumPoolSize : 池中允許的最大線程數。

keepAliveTime : 當線程數大于核心時,此為終止前多余的空閑線程等待新任務的最長時間。

unit : keepAliveTime 參數的時間單位。

workQueue : 執行前用于保持任務的隊列。此隊列僅保持由 execute方法提交的 Runnable任務。

threadFactory : 執行程序創建新線程時使用的工廠。

handler : 由于超出線程范圍和隊列容量而使執行被阻塞時所使用的處理程序。

ThreadPoolExecutor :Executors類的底層實現。

3.1 任務排隊機制

SynchonousQueue: 同步隊列,隊列直接提交給線程執行而不保持它們,此時線程池通常是無界的

LinkedBlockingQueue: 無界對列,當線程池線程數達到最大數量時,新任務就會在隊列中等待執行,可能會造成隊列無限膨脹

ArrayBlockingQueue : 有界隊列,有助于防止資源耗盡,一旦達到上限,可能會造成新任務丟失

注意:

newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue

newCachedThreadPool 使用的是 SynchonousQueue

newScheduledThreadPool使用的是 DelayedWorkQueue

3.2 線程執行流程

一文帶你讀懂Java 線程池框架

3.3 線程大小確定:

cpu密集型: 盡量少開線程,最佳線程數 Ncpu+1

io密集型:多開線程,2Ncpu

混合型:根據情況而定,可以拆分成io密集和cou密集

看完上述內容,你們對一文帶你讀懂Java 線程池框架有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建昌县| 洪江市| 寿阳县| 阿尔山市| 甘南县| 霍邱县| 沧源| 自治县| 墨竹工卡县| 固始县| 依安县| 松溪县| 浦北县| 金昌市| 开封县| 仁布县| 宁蒗| 呼伦贝尔市| 香格里拉县| 青浦区| 双城市| 青冈县| 瑞金市| 金门县| 永顺县| 虞城县| 胶州市| 互助| 中牟县| 花垣县| 额尔古纳市| 敦化市| 牙克石市| 丰顺县| 阳曲县| 大渡口区| 克山县| 万宁市| 汉沽区| 咸丰县| 河东区|