簡單的Future模式及其實現

2021-10-03 01:13:02 字數 3390 閱讀 2303

future模式是乙個多執行緒的設計模式,以下乙個簡單的實現例子。

實現的原理有點類似訂蛋糕,你去商店定做蛋糕時,並不能直接拿到蛋糕,而是拿到購物小票之類的,你需要等蛋糕製作完成後,再來取。在這期間你可以去做其他的事情,而不必在蛋糕店等待蛋糕的製作。這和單獨開乙個執行緒沒有什麼區別,具體有什麼好處我目前也不是很清楚,能感受到的就是**更加簡潔了…易讀性增強了吧~

/**

* created by anur ijuokarukas on 2019/10/6.

* description :

*/public

class

main

}

我們先去蛋糕店,

peoplefutureclient peoplefutureclient =

newpeoplefutureclient()

;

拿到一張購物小票,店員我們需要乙個什麼什麼樣的蛋糕,這個peoplefuturecontainer就是乙個購物小票。

peoplefuturecontainer peoplefuturecontainer = peoplefutureclient.

getpeoplefuturecontainer

("anur"

,"女"

);

然後我們就可以撤了,明天憑購物小票peoplefuturecontainer再來拿(getpeople())。

system.out.

println

(thread.

currentthread()

.getname()

+":執行接下去的業務");

system.out.

println

(thread.

currentthread()

.getname()

+ peoplefuturecontainer.

getpeople()

);

很多網上的例子都是乙個介面,然後各種realdata,futuredata,總覺得不是很有必要那麼寫。下面是我自己的實現方式:

/**

* created by anur ijuokarukas on 2019/10/6.

* description :

*/public

class

peoplefutureclient},

"獲取資訊的執行緒").

start()

;return peoplefuturecontainer;

}}

蛋糕店,裡面就乙個取小票的方法

/**

* created by anur ijuokarukas on 2019/10/6.

* description :

*/public

class

peoplefuturecontainer

}catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+":獲取完成");

this

.people = people;

isready =

true

;notify()

;}public

synchronized people getpeople()

catch

(interruptedexception e)

}return people;

}}

小票的規則也很簡單,就乙個set,乙個get,都加了鎖,這個小票中有乙個狀態標記isready,這個的作用相當於**,你如果沒有接到蛋糕店的**就去取蛋糕了(getpeople),去了以後蛋糕店會告訴你,蛋糕還沒做完,等著吧(wait())。等蛋糕做完你才能取走。(比喻不是特別恰當)

當然如果你是等蛋糕做完才來的,那麼直接取走就行了,因為這個時候,isready 已經是ture了,並不需要wait()。

main:執行接下去的業務

main:準備獲取資訊

獲取資訊的執行緒:獲取資訊中

獲取資訊的執行緒:獲取資訊中.

獲取資訊的執行緒:獲取資訊中.

.獲取資訊的執行緒:獲取資訊中...

獲取資訊的執行緒:獲取資訊中...

.獲取資訊的執行緒:獲取完成

main:姓名:anur,性別:女

執行結果,顯而易見,我們來早了,所以「main:準備獲取資訊」,蛋糕店讓我們等著,過了一會兒,我們取到了蛋糕。

想了一下突然發現這樣寫不如原來的…自己寫的這個不符合開放-封閉原則。

補充:在jdk的concurrent包中已經有了實現了future模式的類

final executorservice executorservice = executors.

newfixedthreadpool(5

);callable callable =((

)->);

future future = executorservice.

submit

(callable)

; system.out.

println

("正在做其他事情");

string result =

(string) future.

get();

system.out.

println

(result)

; executorservice.

shutdown()

;

只需要new乙個executorservice,然後再callable中去new乙個物件並返回,第三步是new乙個future = executorservice.submig(callable)

在需要的時候呼叫future.get方法即可。

最後不要忘記將executorservice關閉掉。

正在做其他事情

請求傳送

耗時操作

時間==

====

*****=0

時間==

====

*****=1

時間==

====

*****=2

時間==

====

*****=3

時間==

====

*****=4

操作完畢

查詢結果

列印結果。

future的簡單實現

一 入門 public classaimplementscallable org.junit.test public voidtest3 throwsexecutionexception,interruptedexception 這樣結果就輸出了 aaa很簡單吧,現在來簡單講解下future的使用。...

實現個簡單的Future

直接貼demo 1.第一種使用喚醒等待執行緒方式 public inte ce gycallable public class gyfeature implements runnable override public void run catch throwable throwable final...

python單例模式及其實現

什麼是單例模式,為什麼要用單例模式,怎麼實現單例模式?只是我們今天要解決的三個問題。首先,第一點,什麼是單例模式?單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用...