欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程Future和Callable類示例分享

 更新時間:2016年01月13日 10:19:21   投稿:hebedich  
JAVA多線程實現(xiàn)方式主要有三種:繼承Thread類、實現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒有返回值,只有最后一種是帶返回值的。今天我們就來研究下Future和Callable的實現(xiàn)方法

一,描寫敘述

    ​在多線程下編程的時候。大家可能會遇到一種需求,就是我想在我開啟的線程都結(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ù)庫表

    這篇文章主要介紹了Springboot如何根據(jù)實體類生成數(shù)據(jù)庫表的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中this,static,final,const用法詳解

    Java中this,static,final,const用法詳解

    這篇文章主要介紹了Java中this,static,final,const用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • SpringBoot實現(xiàn)定時任務(wù)動態(tài)管理示例

    SpringBoot實現(xiàn)定時任務(wù)動態(tài)管理示例

    這篇文章主要為大家介紹了SpringBoot實現(xiàn)定時任務(wù)動態(tài)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Java線程中的ThreadLocal原理及源碼解析

    Java線程中的ThreadLocal原理及源碼解析

    這篇文章主要介紹了Java線程中的ThreadLocal原理及源碼解析,ThreadLocal 的作用是為每個線程保存一份局部變量的引用,實現(xiàn)多線程之間的數(shù)據(jù)隔離,從而避免了線程不安全情況的發(fā)生,需要的朋友可以參考下
    2023-12-12
  • Spring中初始化泛型類的方法實例

    Spring中初始化泛型類的方法實例

    這篇文章主要給大家介紹了Spring中如何初始化泛型類,文中給出詳細(xì)的介紹和方法實例,對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-01-01
  • 通過Docker啟動Solace并在Spring?Boot通過JMS整合Solace的操作方法

    通過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ū)別說明

    關(guān)于JWT與cookie和token的區(qū)別說明

    這篇文章主要介紹了JWT與cookie和token的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 教你在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會使用

    教你在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會使用

    今天給大家?guī)У奈恼率荍ava8新特性的相關(guān)知識,文章圍繞著如何在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會使用展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Java?KeyGenerator.generateKey的19個方法代碼示例

    Java?KeyGenerator.generateKey的19個方法代碼示例

    在下文中一共展示了KeyGenerator.generateKey方法的19個代碼示例,這些例子默認(rèn)根據(jù)受歡迎程度排序
    2021-12-12
  • SpringBoot中使用Redis的完整實例

    SpringBoot中使用Redis的完整實例

    這篇文章主要給大家介紹了關(guān)于SpringBoot中使用Redis的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論