高併發程式設計學習筆記 5 監控任務的生命週期

2021-09-02 08:20:22 字數 1922 閱讀 1688

雖然thread提供了可獲取狀態,以及判斷是否alive的方法,但是這些方法是針對執行緒本身的,而我們提交的任務runnable在執行過程中所處狀態是無法直接獲得的。

當某乙個物件發生狀態改變需要通知第三方時,觀察者模式就能夠勝任這樣的工作。

觀察者模式需要定義三個介面

public

inte***ce

observable

cycle getcycle()

;void

start()

;void

interrupt()

;}

該介面用於返回執行緒的狀態。其中列舉類定義了執行緒的四個狀態。

start()方法與interrupt()方法用於遮蔽thread類其他api。

public

inte***ce

tasklifecycle

@override

public

void

onrunning

(thread thread)

@override

public

void

onfinish

(thread thread, t result)

@override

public

void

onerror

(thread thread, exception e)

}}

public

inte***ce

task

相當於任務類,會被執行緒所執行。

public

class

observablethread

extends

thread

implements

observable

//構造方法

public

observablethread

(tasklifecycle lifecycle, task

task)

//重寫run方法

public

final

void

run(

)catch

(exception e)

}@override

//得到執行緒狀態

public cycle getcycle()

//根據執行緒不同狀態來呼叫tasklifecycle中定義的方法

private

void

update

(cycle cycle, t result,exception e)

try}

catch

(exception ex)}}

}

public

class

test

@override

public

void

onrunning

(thread thread)

@override

public

void

onfinish

(thread thread, integer result)

@override

public

void

onerror

(thread thread, exception e)};

observable o =

newobservablethread

<

>

(lifecycle,()

->

return a;})

; o.

start()

;}}

Java高併發程式設計學習筆記1

執行緒的runnable狀態 已經具備執行條件,只等待cpu排程 萬事俱備只欠東風 1 thread類中得start方法啟動乙個執行緒,並且該執行緒進入了可執行態 runnabel 2 run方法和start方法的區別。3 線 正的執行邏輯在run方法中,通常我們把run方法稱為執行緒的執行單元。重...

Java高併發程式設計筆記

jmm記憶體模型之 可見性 可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。jmm記憶體模型之 有序性 有序性問題的原因是因為程式在執行時,可能會出現指令重排,重排後的指令的順序未必一致。一條指令的執行可以分為很多步驟的 簡單來說就是以下幾步 1 取指if 2 解...

多執行緒高併發程式設計學習筆記三

高併發程式設計學習筆記三 併發容器 佇列 1.map set的選擇使用 1.不需要執行緒安全 hashmap 無序的key value 1.建立table來儲存entry 2.hashcode key 得到鍵值對應該存放的位置 3.用equal方法比較key,如果相同覆蓋資料,如果不同接到下面形成鍊...