雖然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,如果相同覆蓋資料,如果不同接到下面形成鍊...