執行緒中的設計模式

2021-10-05 10:18:39 字數 2302 閱讀 3187

同步模式解決的是乙個執行緒需要等待另乙個執行緒的執行結果。

建立乙個類用來儲存結果,作為溝通兩個執行緒的橋梁

private object response;

private

final object lock =

newobject()

;// 得到返回的結果

public object get()

catch

(interruptedexception e)

}return response;}}

//設定結果

public

void

complete

(object response)

}

應用:

public

static

void

main

(string[

] args)

catch

(ioexception e)})

.start()

; log.

debug

("waiting...");

// 主線程阻塞等待

object response = guardedobject.

get();

log.

debug

("get response: [{}] lines",(

(list

) response)

.size()

);}

獲得結果是一直等待的,如果沒有結果就一直等待,可以優化成等待一段時間,如果還沒有結果就不等了。

public object get

(long millis)

", waittime);if

(waittime <=0)

trycatch

(interruptedexception e)

// 3) 如果提前被喚醒,這時已經經歷的時間假設為 400

timepassed = system.

currenttimemillis()

- begin;

log.

debug

("timepassed: {}, object is null {}"

, timepassed, response == null);}

return response;

}}

看一些thread.join()方法的原始碼。

public

final

synchronized

void

join

(long millis)

throws interruptedexception

if(millis ==0)

}else

wait

(delay)

; now = system.

currenttimemillis()

- base;}}

}

object.wait()和thread.join()join()的底層確實是wait(),wait()也確實釋放鎖,但是釋放的是thread的物件鎖也就可以這麼說

synchronized

(obj)

synchronized

(thread)

模擬乙個阻塞佇列

class

messagequeue

public message take()

catch

(interruptedexception e)

} message message = queue.

removefirst()

; queue.

notifyall()

;return message;}}

public

void

put(message message)

catch

(interruptedexception e)

} queue.

addlast

(message)

; queue.

notifyall()

;}}}

多執行緒設計中的設計模式

中午吃過飯回來閒著沒事,忽然想起多執行緒,開啟網頁隨便看了下,發現多執行緒的實現實際就是用模板方法 裝飾者兩種模式設計的。模板方法模式定義 在乙個類中定義乙個演算法,但將此演算法的某些細節留到子類中去實現.換句話說,基類是乙個抽象類,那麼你就是在使用一種簡單形式的摸板模式。裝飾者模式定義 裝飾者模式...

多執行緒中的設計模式(Future模式)

future模式 給你個引用 你在通過這個引用去獲取資料。給你個鑰匙,自己去拿 其中客戶端實際使用時,採用執行緒等待形式,當other call 執行完成後,喚醒客戶端請求。futureclient public class futureclient start return futuredata ...

設計模式和執行緒設計模式

volatile 可見性和順序性,不保證原子性 單例模式 監控執行緒生命週期的observable 採用乙個observable介面來獲取任務執行的狀態,主要想法是重寫run方法。在任務建立,開始,結束,錯誤時介入乙個方法,用來進行處理。同時維護乙個指示任務狀態的類變數。採用模板設計模式的方式,將具...