併發程式設計 保護性暫停模式

2021-10-19 07:08:27 字數 2034 閱讀 9734

目錄

併發程式設計之保護性暫停模式

一、定義(guarded suspension design pattern)

二、簡單實現

三、超時實現

四、最終實現

某個結果需要在多執行緒之間傳遞,則可以讓這些執行緒關聯到乙個物件guardedobject

但是這個物件需要不斷從乙個執行緒到另外乙個執行緒,那麼可以使用訊息佇列

join和future採用的就是這種模式

@slf4j(topic = "liheng")

public class guardedobject catch (interruptedexception e) }}

return response;

}/**

* t1 給response設定值

* @param response

*/public void setresponse(object response) }}

模擬耗時類:

public class operate  catch (interruptedexception e) 

return "result";}}

測試類:

@slf4j(topic = "liheng")

public class test ,"t1").start();

log.debug("主線程等待(wait)t1 set");

object response = guardedobject.getresponse();

log.debug("response: [{}] lines",response);

}}/**

---------------列印結果---------------

19:17:50.640 [main] debug liheng - 主線程等待(wait)t1 set

19:17:50.642 [main] debug liheng - 主線程 獲取 response 如果為null則wait

19:17:54.645 [t1] debug liheng - t1 set完畢...

19:17:54.646 [main] debug liheng - response: [result] lines

*/

@slf4j(topic = "liheng")

public class guardedobject1 catch (interruptedexception e) }}

return response;

}/**

* t1 給response設定值

* @param response

*/public void setresponse(object response) }}

最終實現考慮了,如果阻塞執行緒被別人叫醒的情況

@slf4j(topic = "liheng")

public class guardedobjecttimeout 毫秒",waittime);

if (waittime <= 0)

try catch (interruptedexception e)

//如果被別人提前喚醒 先不結束 先計算一下經歷時間

timepassed = system.currenttimemillis() - begin;

log.debug("經歷了: {}", timepassed);}}

return response;

}/**

* t1 給response設定值

* @param response

*/public void setresponse(object response) }}

多執行緒設計模式 保護性暫停模式

保護性暫停模式就是提供了一種執行緒間通訊能力的模式。如果有乙個執行緒的執行結果需要傳遞給另乙個執行緒,就需要使用保護性暫停模式將兩條執行緒關聯起來。jdk中join方法和future就是使用了此模式實現的。package com.leolee.multithreadprogramming.concu...

Java併發程式設計 Futrue模式

一.futrue模式概念 futrue模式有點類似於商品訂單.比如在網購時,當看中某件商品時,就可以提交訂單,當訂單處理完成後,在家裡等待商品送貨上門即可.或者更形象地,我們傳送ajax請求的時候,頁面是非同步地進行後台處理,使用者無須一直等待請求的結果,可以繼續瀏覽或操作其他內容.二.示例 pac...

併發程式設計之Master Worker模式

master worker模式是常用的併發模式,核心是master和worker兩個程序,master接收和分配任務,各個worker執行任務並返回結果,由master來歸納和總結。好處是能將大任務分解為若干個小任務,提高系統的吞吐量。示例 public class master 5.接收任務 pu...