Java併發框架Executor

2021-07-09 03:58:18 字數 1887 閱讀 7181

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來處理大量的執行緒時,可以確保時刻在任何執行緒中都只有唯一的任務在執行。在這種方式中,不需要再共享資源上處理同步。

public

class

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百萬訂單。業務邏輯處理器完全是執行在記憶體中,使用事件源驅動...