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 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用...