目錄
併發程式設計之保護性暫停模式
一、定義(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...