java併發程式設計 Exexctor簡介

2021-09-25 06:06:10 字數 2970 閱讀 5502

excutor介面定義如下

executorservice 是乙個比executor使用更廣泛的子類介面,其提供了生命週期管理的方法,以及可跟蹤乙個或多個非同步任務執行狀況返回future的方法

executorservice執行方法的預設實現

乙個可定時排程任務的介面

scheduledexecutorservice的實現,乙個可定時排程任務的執行緒池

scheduledexecutorservice 的乙個建構函式如下

執行緒池,可以通過呼叫executors 的靜態工廠方法來建立執行緒池並返回乙個executorservice物件

threadpoolexecutor 的乙個建構函式如下

corepoolsize:核心執行緒數,如果執行的執行緒少於corepoolsize,則建立新執行緒來執行新任務,即使執行緒池中的其他執行緒是空閒的

maximumpoolsize:最大執行緒數,可允許建立的執行緒數,

corepoolsize 和 maximumpoolsize 設定的邊界自動調整池大小:

-  corepoolsize  < 執行的執行緒數 < maximumpoolsize :僅當佇列滿時才建立新執行緒

-  corepoolsize = 執行的執行緒數 = maximumpoolsize :建立固定大小的執行緒池

keepalivetime  :如果執行緒數多於 corepoolsize ,則這些多餘的執行緒的空閒時間超過keepalivetime時將被終止

unit  :keepalivetime引數的時間單位

workqueue:儲存任務的阻塞佇列,與執行緒池的大小有關:

-  執行的執行緒數

-  執行的執行緒數 >= corepoolsize 時,在有新任務新增時則選加入佇列,不直接建立執行緒

-  當佇列滿時,在有新任務時就建立新執行緒

threadfactory:使用 threadfactory 建立新執行緒,預設使用 defaultthreadfactory 建立執行緒

handle:定義處理被拒絕任務的策略,預設使用 threadpoolexecutor.abortpolicy,任務被拒絕時將丟擲 rejectexecutorexception

executorservice 提供了管理 eecuto r生命週期的方法,executorservice的生命週期包括了:執行  關閉和終止三種狀態。

executorservice 在初始化建立時處於執行狀態。

- shutdown 方法等待提交的任務執行完成並不再接受新任務,在完成全部提交的任務後關閉

- shutdownnow 方法將強制終止所有執行中的任務並不再允許提交新任務

實現了completionservice,它將 blockingqueue 和 executor 封裝起來。然後使用 executorcompletionservice.submit() 方法提交任務。

將執行完成的任務放到阻塞佇列中,通過 take 或 poll 方法來獲得執行結果。

submit 方法如下:

public futuresubmit(callabletask)
queueingfuture:

private

class queueingfuture extends futuretask

//實現了futuretask 的done 方法,在任務處理完畢或者拋異常後將封裝成future的任務加入到佇列。這樣我們就能在佇列中取到處處理完的任務,並通過future.get()方法去取得處理完後的結果。不用自己去判斷任務是否處理完畢了

protected

void

done()

private

final futuretask;

}

例項:

//

啟動10條執行緒,誰先執行完成就返回誰

executorservice executor = executors.newfixedthreadpool(10); //

建立含10.條執行緒的執行緒池

completionservice service = new

executorcompletionservice(executor);

for (int i = 1; i <= 10; i++)

});}system.out.println(service.take().get());

//獲取執行結果

JAVA併發程式設計

通過常量字串 string 來呼叫 wait 或 notify 方法所導致的問題是,jvm 編譯器會在內部自動將內容相同的 string 轉變為相同的物件。這意味著,即便你建立了兩個不同的 mywaitnotify 例項,他們內部的 mymonitorobject 變數也會指向相同的 string ...

Java併發程式設計

執行緒之間通訊 1.加鎖 object.wait 釋放鎖 object.notify 與sychronized 聯合使用,object lock new object sychronized lock sychronized lock 2.改進 無需加鎖並發包下 countdownlatch.awa...

Java併發程式設計 分治程式設計

分治演算法是五大常用演算法之一,本來不應該在這個時間寫這篇部落格,因為之前的執行緒池還沒有寫完,有些知識點也是需要用到的執行緒池的,但是架不住現在的專案裡有個坑隊友,名曰大桌球,他好像是批量註冊使用者還是什麼 暫時就先當做是批量註冊吧 反正就是很多很多使用者,每個使用者大概0.5秒左右的註冊時間,要...