1. 程式人生 > >池與執行緒池 技術點 目錄 1. 執行緒池作用: 提升效能 1 2. 使用流程 1 3. 執行緒與執行緒池的監控 jvisual 1 4. 執行緒常用方法 2 5. 執行緒池相關概念 2 5.1. 佇列

池與執行緒池 技術點 目錄 1. 執行緒池作用: 提升效能 1 2. 使用流程 1 3. 執行緒與執行緒池的監控 jvisual 1 4. 執行緒常用方法 2 5. 執行緒池相關概念 2 5.1. 佇列

 池與執行緒池 技術點

 

目錄

1. 執行緒池作用:  提升效能 1

2. 使用流程 1

3. 執行緒與執行緒池的監控  jvisual 1

4. 執行緒常用方法 2

5. 執行緒池相關概念 2

5.1. 佇列  BlockingQueue介紹 2

5.2. 原子操作 2

6. 用途 2

7. Java執行緒面試問題 2

7.1. 在java中wait和sleep方法的不同? 2

8. 確定執行緒池數量的簡單方法 3

9. 執行緒池中的幾種重要的引數及流程說明 3

 

 

 

Need  rejenlei from myesi docx

 

  1. 執行緒池作用:  提升效能

 

類似  物件池,資料庫連線池

 

  1. 使用流程

建立執行緒池。。

新增執行緒。。

 

 

  1. 執行緒與執行緒池的監控  jvisual

 

  1. 執行緒常用方法

join方法,等待執行緒t執行完畢 

Wait    sleep

 

  1. 執行緒池相關概念
    1. 佇列  BlockingQueue介紹
    2. 原子操作
  2. 用途

生產者、消費者有很多的實現方法: 
- 用wait() / notify()方法 
- 用Lock的多Condition方法 
- BlockingQueue阻塞佇列方法

 

 

  1. Java執行緒面試問題
    1. 在java中wait和sleep方法的不同?

通常會在電話面試中經常被問到的Java執行緒面試問題。 


最大的不同是在等待時wait會釋放鎖,而sleep一直持有鎖。Wait通常被用於執行緒間互動,sleep通常被用於暫停執行

  1. 確定執行緒池數量的簡單方法

演算法類,一般是cpu核心數

Io類,一般提升一個數量級。。具體根據io繁忙程度調整

 

  1. 執行緒池中的幾種重要的引數及流程說明

 public ThreadPoolExecutor(int corePoolSize,

                              int maximumPoolSize,

                              long keepAliveTime,

                              TimeUnit unit,

                              BlockingQueue<Runnable> workQueue,

                              ThreadFactory threadFactory,

                              RejectedExecutionHandler handler) {

    

corePoolSize:核心池的大小,這個引數跟後面講述的執行緒池的實現原理有非常大的關係。在建立了執行緒池後,預設情況下,執行緒池中並沒有任何執行緒,而是等待有任務到來才建立執行緒去執行任務,除非呼叫了prestartAllCoreThreads()或者prestartCoreThread()方法,從這2個方法的名字就可以看出,是預建立執行緒的意思,即在沒有任務到來之前就建立corePoolSize個執行緒或者一個執行緒。預設情況下,在建立了執行緒池後,執行緒池中的執行緒數為0,當有任務來之後,就會建立一個執行緒去執行任務,當執行緒池中的執行緒數目達到corePoolSize後,就會把到達的任務放到快取隊列當中;

maximumPoolSize:執行緒池最大執行緒數,這個引數也是一個非常重要的引數,它表示線上程池中最多能建立多少個執行緒;

keepAliveTime:表示執行緒沒有任務執行時最多保持多久時間會終止。預設情況下,只有當執行緒池中的執行緒數大於corePoolSize時,keepAliveTime才會起作用,直到執行緒池中的執行緒數不大於corePoolSize,即當執行緒池中的執行緒數大於corePoolSize時,如果一個執行緒空閒的時間達到keepAliveTime,則會終止,直到執行緒池中的執行緒數不超過corePoolSize。但是如果呼叫了allowCoreThreadTimeOut(boolean)方法,線上程池中的執行緒數不大於corePoolSize時,keepAliveTime引數也會起作用,直到執行緒池中的執行緒數為0;

unit:引數keepAliveTime的時間單位,有7種取值,在TimeUnit類中有7種靜態屬性:

TimeUnit.DAYS;               //天

TimeUnit.HOURS;             //小時

TimeUnit.MINUTES;           //分鐘

TimeUnit.SECONDS;           //秒

TimeUnit.MILLISECONDS;      //毫秒

TimeUnit.MICROSECONDS;      //微妙

TimeUnit.NANOSECONDS;       //納秒

workQueue:一個阻塞佇列,用來儲存等待執行的任務,這個引數的選擇也很重要,會對執行緒池的執行過程產生重大影響,一般來說,這裡的阻塞佇列有以下幾種選擇:

ArrayBlockingQueue

LinkedBlockingQueue

SynchronousQueue

PriorityBlockingQueue

ArrayBlockingQueue和PriorityBlockingQueue使用較少,一般使用LinkedBlockingQueue和SynchronousQueue。執行緒池的排隊策略與BlockingQueue有關。

threadFactory:用於設定建立執行緒的工廠,可以通過執行緒工廠給每個創建出來的執行緒做些更有意義的事情,比如設定daemon和優先順序等等

handler:表示當拒絕處理任務時的策略,有以下四種取值:

1、AbortPolicy:直接丟擲異常。2、CallerRunsPolicy:只用呼叫者所線上程來執行任務。3、DiscardOldestPolicy:丟棄佇列裡最近的一個任務,並執行當前任務。4、DiscardPolicy:不處理,丟棄掉。5、也可以根據應用場景需要來實現RejectedExecutionHandler介面自定義策略。如記錄日誌或持久化不能處理的任務。

     }

 
 

 

2. 執行緒池問題 4

2.1. 什麼是執行緒池: 4

2.2.      一個執行緒池包括以下四個基本組成部分:執行緒池管理器(ThreadPool)工作執行緒(PoolWorker)任務介面(Task)任務佇列(taskQueue): 5

2.3. 2.常見執行緒池newFixedThreadExecutor(n) ③newCacheThreadExecutor(推薦使用) 5

2.4. 二:執行緒池執行緒池的作用: 5

2.5. 為什麼要用執行緒池: 6

2.6. 排隊有三種通用策略:直接提交。無界佇列。有界佇列。 6

3. 執行緒池常見引數 6

3.1. 為什麼要使用執行緒池? 8

3.2. 執行緒池有什麼作用? 8

3.3. 說說幾種常見的執行緒池及使用場景 8

3.4.   執行緒池都有哪幾種工作佇列 8

3.5. 怎麼理解無界佇列和有界佇列 9