程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java 線程池框架

Java 線程池框架

編輯:關於JAVA

Java 線程池框架。本站提示廣大學習愛好者:(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 線程執行流程

3.3 線程大小確定:

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

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

混合型:依據狀況而定,可以拆分紅io密集和cou密集

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved