java多線程Future和Callable類示例分享
一,描寫敘述
在多線程下編程的時候。大家可能會遇到一種需求,就是我想在我開啟的線程都結(jié)束時,同一時候獲取每一個線程中返回的數(shù)據(jù)然后再做統(tǒng)一處理,在這種需求下,F(xiàn)uture與Callable的組合就派上了非常大的用場。
也有人會說,我能夠使用同步來完畢這個需求啊,普通情況下確實能夠??墒窃谝环N特殊情況下就不行了:
想象,你開啟了多個線程同步計算一些數(shù)據(jù),可是大家都知道,線程是會爭用資源的,也就是說。你開啟多個線程來同步計算數(shù)據(jù)時。事實上線程之間的計算順序是不可空的,當(dāng)然除非你非非常大周折去處理也不無可能。在這樣的情況下。Future和Callable的組合就是不二之選了。
二,樣例
這兩個類的樣例事實上非常easy,主要就看自己在實際運用中能不能找到他們的用武之地了。上代碼:
package test; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class FetureCallableTest { private static ExecutorService service = Executors.newFixedThreadPool(100); private static int count = 1; public static void main(String[] args) throws InterruptedException, ExecutionException { int sum = 0; for(int i = 0; i < 100; i++) { Future<Integer> future = service.submit(new Callable<Integer>(){ @Override public Integer call() throws Exception { System.out.println(Thread.currentThread().getName()); return ++count; } }); int f = future.get(); sum += f; System.out.println("future is " + f); } System.out.println("sum is " + sum); service.shutdownNow(); } }
相關(guān)文章
Springboot如何根據(jù)實體類生成數(shù)據(jù)庫表
這篇文章主要介紹了Springboot如何根據(jù)實體類生成數(shù)據(jù)庫表的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java中this,static,final,const用法詳解
這篇文章主要介紹了Java中this,static,final,const用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07SpringBoot實現(xiàn)定時任務(wù)動態(tài)管理示例
這篇文章主要為大家介紹了SpringBoot實現(xiàn)定時任務(wù)動態(tài)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06通過Docker啟動Solace并在Spring?Boot通過JMS整合Solace的操作方法
本文將介紹如何在Spring中使用,雖然代碼使用的是Spring Boot,但并沒有使用相關(guān)starter,跟Spring的整合一樣,可通用,JMS是通過的消息處理框架,可以深入學(xué)習(xí)一下,不同的MQ在JMS的整合上都是類似的,感興趣的朋友跟隨小編一起看看吧2023-01-01關(guān)于JWT與cookie和token的區(qū)別說明
這篇文章主要介紹了JWT與cookie和token的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10教你在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會使用
今天給大家?guī)У奈恼率荍ava8新特性的相關(guān)知識,文章圍繞著如何在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會使用展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06Java?KeyGenerator.generateKey的19個方法代碼示例
在下文中一共展示了KeyGenerator.generateKey方法的19個代碼示例,這些例子默認(rèn)根據(jù)受歡迎程度排序2021-12-12