91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解JDK中ExecutorService與Callable和Future對線程的支持

發布時間:2020-10-04 05:53:26 來源:腳本之家 閱讀:213 作者:莫欺少年窮Java 欄目:編程語言

詳解JDK中ExecutorService與Callable和Future對線程的支持

1、代碼背景:

    假如有Thread1、Thread2、Thread3、Thread4四條線程分別統計C、D、E、F四個盤的大小,所有線程都統計完畢交給Thread5線程去做匯總,應當如何實現?

2、代碼:

    統計“盤子”大小的代碼,此處實現jdk中的Callable接口,

package com.wang.test.concurrent; 
 
import java.util.concurrent.Callable; 
 
public class Task1 implements Callable<Integer> { 
 
  private int x; 
  private int y; 
   
  public Task1(int x, int y) { 
    this.x = x; 
    this.y = y; 
  } 
 
  @Override 
  public Integer call() throws Exception { 
    return x*y; 
  } 
 
} 

    統計匯總的代碼,也是實現jdk中的Callable接口,

package com.wang.test.concurrent; 
 
import java.util.concurrent.Callable; 
 
public class Task2 implements Callable<Integer> { 
 
  private int x; 
  private int y; 
  private int q; 
  private int w; 
   
  public Task2(int x, int y, int q, int w) { 
    this.x = x; 
    this.y = y; 
    this.q = q; 
    this.w = w; 
  } 
 
  @Override 
  public Integer call() throws Exception { 
    return x + y + q + w; 
  } 
 
} 

     客戶端:使用JDK中Executors.newFixedThreadPool方法創建ExecutorService,ExecutorService的submit方法接收Callable接口的實現,JDK內部將弄成線程處理,使用Future接收submit方法的返回值,當future調用get方法時,如果線程還沒有執行完,程序阻塞在這里,知道線程執行完。

package com.wang.test.concurrent; 
 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.Future; 
 
public class Client { 
 
  public static void main(String[] args) throws Exception { 
    ExecutorService pool = Executors.newFixedThreadPool(4); 
 
    Task1 t1 = new Task1(1,2); 
    Task1 t2 = new Task1(23,34); 
    Task1 t3 = new Task1(23,456); 
    Task1 t4 = new Task1(3,33); 
    Future<Integer> f1 = pool.submit(t1); 
    Future<Integer> f2 = pool.submit(t2); 
    Future<Integer> f3 = pool.submit(t3); 
    Future<Integer> f4 = pool.submit(t4); 
     
    //Future調用get方法時,如果線程還沒有執行完,程序阻塞在這里 
    Task2 t5 = new Task2(f1.get(), f2.get(), f3.get(), f4.get()); 
    Future<Integer> f5 = pool.submit(t5); 
     
    System.out.println(f5.get()); 
     
    pool.shutdown(); 
  } 
} 

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投市| 潞城市| 乌兰浩特市| 宕昌县| 通许县| 运城市| 三原县| 阜阳市| 仁寿县| 绥芬河市| 德格县| 奉化市| 渭源县| 东安县| 苗栗市| 衡阳县| 德钦县| 沧源| 涞源县| 方城县| 德阳市| 金塔县| 福海县| 泾川县| 西宁市| 井研县| 资溪县| 厦门市| 肃宁县| 拉孜县| 娄底市| 常州市| 旬邑县| 桐庐县| 巴楚县| 全州县| 泉州市| 周至县| 福鼎市| 合川市| 阜平县|