併發模型(一) Future模式

2021-06-26 01:44:14 字數 2101 閱讀 2355

多執行緒開發可以更好的發揮多核cpu效能,常用的多執行緒設計模式有:future、master-worker、guard susperionsion、不變、生產者-消費者 模式;jdk除了定義了若干併發的資料結構,也內建了多執行緒框架和各種執行緒池;    鎖(分為內部鎖、重入鎖、讀寫鎖)、threadlocal、訊號量等在併發控制中發揮著巨大的作用。這裡重點介紹第一種併發——future模型。

一、什麼是future模型:

該模型是將非同步請求和**模式聯合的模型產物。類似商品訂單模型。見下圖:

客戶端傳送乙個長時間的請求,服務端不需等待該資料處理完成便立即返回乙個偽造的**資料(相當於商品訂單,不是商品本身),使用者也無需等待,先去執行其他的若干操作後,再去呼叫伺服器已經完成組裝的真實資料。該模型充分利用了等待的時間片段。

二、future模式的核心結構:

main:啟動系統,呼叫client發出請求;

client:返回data物件,理解返回futuredata,並開啟clientthread執行緒裝配realdata;

data:返回資料的介面;

futuredata:future資料,構造很快,但是是乙個虛擬的資料,需要裝配realdata;

realdata:真實資料,構造比較慢。

三、future模式的**實現:

(1)main函式:

package tgb;

public class main catch (exception e)

//真實資料

system.out.println("資料 = "+ data.getresult());} }

(2)client的實現:

package tgb;

public class client

}.start();

return future; }}

(3)data的實現:

package tgb;

public inte***ce data

(4)futuredata:

package tgb;

/** * 是對realdata的乙個包裝

* @author limin

* */

public class futuredata implements data

this.realdata=realdata;

isready=true;

notifyall();

}@override

public synchronized string getresult() catch (exception e)

} return realdata.result; }}

(5)realdata實現:

package tgb;

public class realdata implements data catch(exception e)

result= sb.tostring();

} }

@override

public string getresult()

}

注意:futuredata是對realdata的包裝,是dui真實資料的乙個**,封裝了獲取真實資料的等待過程。它們都實現了共同的介面,所以,針對客戶端程式組是沒有區別的;

客戶端在呼叫的方法中,單獨啟用乙個執行緒來完成真實資料的組織,這對呼叫客戶端的main函式式封閉的;

因為咋futuredata中的notifyall和wait函式,主程式會等待組裝完成後再會繼續主程序,也就是如果沒有組裝完成,main函式會一直等待。

高併發程式設計Future模式

future模式是多執行緒開發中非常常見的一種設計模式,它的核心思想是非同步呼叫。當我們需要呼叫乙個方法時,若該方法比較複雜,執行較慢,那麼我們就要一直等待直到該方法執行結束,返回資訊。但我們有時候並不急著要這個結果,而希望在這個方法在執行的時候可以做別的事情,而當我們需要這個結果的時候,再去獲取這...

Future模式(憑據模式)

此種方式將future與task分離開來。導致finish 方法暴露出來。被外部呼叫。更優的方式將future與task結合起來。參考jdk futuretask類 不便於管理。如果要實現cancle,參考futuretask在內部將callback與future分離開來的設計 public int...

手寫Future模式

根據前面我所說的futrue模式,手寫乙個 公共data資料介面 public abstract class data package futuretest 獲取真實資料 public class realdata extends data catch interruptedexception e ...