高併發程式設計Future模式

2021-10-01 10:32:50 字數 1383 閱讀 4849

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

future模式相當於我們做出請求之後,並不會直接獲得真實想要的資料,而是返回了乙個契約(比如說,訂單),當我們需要這個真實的資料的時候,再通過這個契約去獲取真實的資料。再我們沒有去拿這個真實資料的時候,程式是可以做其他操作的,這樣就不會把時間浪費在等待這個並不急著要的真實資料上。當然,如果我們去獲取這個真實資料的時候,該方法還沒有執行完畢,這個時候執行緒才會進入等待。

future模式的主要參與者:

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

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

data:返回資料的介面;

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

realdata:真實資料,其構造比較慢,也是我們要的真實資料。

簡單實現future模式的**如下:

public class main

}public class futureclient

}).start();

return feturedata;}}

//當有執行緒想要獲取realdata的時候,程式會被阻塞。等待realdata被注入才會使用getreal()方法

public class feturedata extends data

//如果flag為false,沒有獲取到資料,傳遞readdata物件

this.realdata = realdata;

flag = true;

notify();

}@override

public synchronized string getrequest() catch (interruptedexception e)

}return realdata.getrequest();}}

//獲取真實的資料

public class realdata extends data catch (interruptedexception e)

system.out.println("操作執行完畢。。。獲取到結果result");

//獲取返回結果

this.result = "result";

}@override

public string getrequest()

}public abstract class data

併發模型(一) Future模式

多執行緒開發可以更好的發揮多核cpu效能,常用的多執行緒設計模式有 future master worker guard susperionsion 不變 生產者 消費者 模式 jdk除了定義了若干併發的資料結構,也內建了多執行緒框架和各種執行緒池 鎖 分為內部鎖 重入鎖 讀寫鎖 threadloc...

java併發程式設計學習2 Future

future的概念 inte ce future,表示非同步計算的結果,future有個get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態,然後會返回結果或者丟擲異常。相對於繼承thread來建立執行緒方式,使用runnable可以讓你的實現類同時實現多個介面,而相對於ca...

java併發程式設計學習2 Future

inte ce future,表示非同步計算的結果,future有個get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態,然後會返回結果或者丟擲異常。相對於繼承thread來建立執行緒方式,使用runnable可以讓你的實現類同時實現多個介面,而相對於callable及fut...