executor:可管理thread物件,它在客戶端和任務執行之間提供了乙個間接層。它允許我們管理非同步任務的執行,而無需顯示的管理執行緒的生命週期。
建立執行緒池:
executors類,提供了一系列工廠方法用於創先執行緒池,返回的執行緒池都實現了executorservice介面。
1、executors.newcachedthreadpool():
public
class
testexecutors
}class
testthread
implements
runnable
@override
public
void run()
}}輸出結果為:
t1:0
t1:1
t1:2
t1:3
t1:4
t2:0
t2:1
t2:2
t2:3
t2:4
2、executors.newfixedthreadpool():
fixedthreadpool():使用了有限的執行緒集來執行所提交的事務。可以一次性預先執行代價高昂的執行緒分配,因而也就可以限制執行緒的數量了。此時,不需要為每個任務都固定的付出建立執行緒的開銷。在事件驅動的系統中,需要執行緒的事件處理器,通過直接從池中獲取執行緒,也可以盡快的得到服務。規定數目的執行緒處理所有任務,一旦有執行緒處理完了任務就會被用來處理新的任務(如果有的話)。新的執行緒加入後,如果正在執行的執行緒達到了上限,則會阻塞,直到有了空閒的執行緒來執行
public
class
testexecutors
exec.shutdown();
}}class
testthread
implements
runnable
@override
public
void run()
}}輸出結果為:
t0:0
t0:1
t0:2
t0:3
t1:0
t2:0
t1:1
t2:1
t1:2
t2:2
t1:3
t2:3
t3:0
t4:0
t3:1
t4:1
t3:2
t4:2
t3:3
t4:3
同時只有兩個執行緒在執行
3、executors.newsinglethreadpool():
singlethreadpool:就像是執行緒數量為1的fixedthreadpool。向singlethreadexecutor提交多個任務時,這些任務將排隊,每個任務都會在下乙個任務開始之前執行結束,所有的任務都將使用相同的執行緒。採用singlethreadexecutor來處理大量的執行緒時,可以確保時刻在任何執行緒中都只有唯一的任務在執行。在這種方式中,不需要再共享資源上處理同步。
publicclass
testexecutors
exec.shutdown();
}}class
testthread
implements
runnable
@override
public
void run()
}}輸出結果為:
t0:0
t0:1
t0:2
t0:3
t1:0
t1:1
t1:2
t1:3
t2:0
t2:1
t2:2
t2:3
Java併發框架 公平性
準備入佇列的節點,此情況討論的是執行緒加入等待佇列時產生的競爭是否公平,執行緒在嘗試獲取鎖失敗後將被加入等待佇列,這時多個執行緒通過自旋將節點加入佇列,所有執行緒在自旋過程中是無法保證其公平性的,可能後來的執行緒比早到的先進入佇列,所以節點入佇列不具公平性。等待佇列中的節點,情況 中成功加入佇列後即...
併發程式設計 Disruptor併發框架
disruptor是什麼?disruptor是乙個高效能的非同步處理框架,或者可以認為是最快的訊息框架 輕量的jms 也可以認為是乙個觀察者模式的實現,或者事件監聽模式的實現 disruptor入門程式 在disruptor中實現helloworld入門程式的步驟 1.建立乙個event類 資料 2...
併發框架Disruptor
martin fowler在自己 上寫了一篇 lmax架構 的文章,在文章中他介紹了lmax是一種新型零售金融交易平台,它能夠以很低的延遲產生大量交易。這個系統是建立在jvm平台上,其核心是乙個業務邏輯處理器,它能夠在乙個執行緒裡每秒處理6百萬訂單。業務邏輯處理器完全是執行在記憶體中,使用事件源驅動...