国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java并行編程:從并行任務集獲取反饋

開發 后端
要實現多線程的這種反饋,我們可以使用Callable接口。此接口的工作方式基本上與Runnable相同,但是執行方法(call())會返回一個值,該值反映了執行計算的結果。詳細請看下文

在并行任務啟動后,強制性地從并行任務得到反饋。

假想有一個程序,可以發送批郵件,還使用了多線程機制。你想知道有多少郵件成功發送嗎?你想知道在實際發送過程期間,這個批處理工作的實時進展嗎?

要實現多線程的這種反饋,我們可以使用Callable接口。此接口的工作方式基本上與Runnable相同,但是執行方法(call())會返回一個值,該值反映了執行計算的結果。

  1. package com.ricardozuasti;  
  2.  
  3. import java.util.concurrent.Callable;  
  4.  
  5. public class FictionalEmailSender implements Callable<Boolean>{  
  6.     private String to;  
  7.     private String subject;  
  8.     private String body;  
  9.     public FictionalEmailSender(String to, String subject, String body){  
  10.         this.to = to;  
  11.         this.subject = subject;  
  12.         this.body = body;  
  13.     }  
  14.  
  15.     @Override 
  16.     public Boolean call() throws InterruptedException {  
  17.         // 在0~0.5秒間模擬發送郵件  
  18.         Thread.sleep(Math.round(Math.random()*0.5*1000));  
  19.         // 假設我們有80%的幾率成功發送郵件  
  20.         if(Math.random()>0.2){  
  21.             return true;  
  22.         }else{  
  23.             return false;  
  24.         }  
  25.     }  
  26.       
  27. }  

注意:Callable接口可用于返回任意數據類型,因此我們的任務可以返回我們需要的任何信息。

現在,我們使用一個線程池ExecutorService來發送郵件,由于我們的任務是以Callable接口實現的,我們提交執行的每個新任務,都會得到一個Future引用。注意我們要使用直接的構造器創建ExecutorService,而不是使用來自Executors的工具方法創建。這是因為使用指定類ThreadPoolExecutor提供了一些方法可以派上用場。

  1. package com.ricardozuasti;  
  2.  
  3. import java.util.concurrent.Future;  
  4. import java.util.concurrent.LinkedBlockingQueue;  
  5. import java.util.concurrent.ThreadPoolExecutor;  
  6. import java.util.concurrent.TimeUnit;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.  
  10. public class Concurrency2 {  
  11.     public static void main(String[] args){  
  12.         try{  
  13.             ThreadPoolExecutor executor = new ThreadPoolExecutor(30301,  
  14.      TimeUnit.SECONDS, new LinkedBlockingQueue());  
  15.             List<Future<Boolean>> futures = new ArrayList<Future<Boolean>>(9000);  
  16.             // 發送垃圾郵件, 用戶名假設為4位數字  
  17.             for(int i=1000; i<10000; i++){  
  18.                 futures.add(executor.submit(new FictionalEmailSender(i+"@sina.com",  
  19.                         "Knock, knock, Neo""The Matrix has you...")));  
  20.             }  
  21.             // 提交所有的任務后,關閉executor  
  22.             System.out.println("Starting shutdown...");  
  23.             executor.shutdown();  
  24.               
  25.             // 每秒鐘打印執行進度  
  26.             while(!executor.isTerminated()){  
  27.                 executor.awaitTermination(1, TimeUnit.SECONDS);  
  28.                 int progress = Math.round((executor.getCompletedTaskCount()  
  29. *100)/executor.getTaskCount());  
  30.                 System.out.println(progress + "% done (" +   
  31. executor.getCompletedTaskCount() + " emails have been sent).");  
  32.             }  
  33.             // 現在所有郵件已發送完, 檢查futures, 看成功發送的郵件有多少  
  34.             int errorCount = 0;  
  35.             int successCount = 0;  
  36.             for(Future<Boolean> future : futures){  
  37.                 if(future.get()){  
  38.                     successCount++;  
  39.                 }else{  
  40.                     errorCount++;  
  41.                 }  
  42.             }  
  43.             System.out.println(successCount + " emails were successfully sent, but " +  
  44.                     errorCount + " failed.");  
  45.         }catch(Exception ex){  
  46.             ex.printStackTrace();  
  47.         }  
  48.     }  
  49. }  

執行這個類,輸出結果如下:

  1. Starting shutdown...  
  2. 1% done (118 emails have been sent).  
  3. 2% done (232 emails have been sent).  
  4. 3% done (358 emails have been sent).  
  5. 5% done (478 emails have been sent).  
  6. 6% done (587 emails have been sent).  
  7. 7% done (718 emails have been sent).  
  8. 9% done (850 emails have been sent).  
  9. 10% done (969 emails have been sent).  
  10. ……  

所有的任務都由ExecutorService提交,我們開始它的關閉(防止提交新任務)并使用一個循環(實時場景,可能你會繼續做其它的事情)來等待,直至所有任務都被執行完成、計算和打印當前每次迭代的進度。

注意,你可以存儲executor引用,也可以在任意時間從其它線程查詢它的計算結果和報告進程進度。

最后,使用Future集合引用,我們得到ExecutorService提交的每個Callable接口,通知成功發送的郵件數量和發送失敗的郵件數量。

此結構不但易于使用,還使得相關性得到清晰的隔離,在調度程序和實際任務之間提供了一個預定義的通信機制。

原文鏈接:http://blog.csdn.net/chszs/article/details/7418880

【編輯推薦】

  1. Java反射機制初探
  2. 不再糾結Java中的String類
  3. Java中常見IO的讀寫效率對比
  4. 棧的Java實現和棧的應用舉例
  5. 實戰是硬道理:記Java技術面試
責任編輯:林師授 來源: chszs的博客
相關推薦

2010-06-02 08:53:51

.NET 4并行編程

2012-04-10 10:04:26

并行編程

2009-05-13 15:38:45

微軟并行語言Axum

2014-02-12 13:43:50

代碼并行任務

2017-04-13 19:20:18

Python代碼并行任務

2024-07-26 07:54:53

2010-03-26 19:03:19

F#異步并行模式

2023-11-08 09:36:01

Java編程

2015-10-13 09:18:00

.Net編程教程

2021-09-09 07:16:00

C#多線程開發

2010-06-04 09:11:10

.NET并行編程

2011-09-22 09:41:16

JavaScript

2023-11-01 20:10:53

分布式并行技術

2010-06-08 08:41:08

.NET 4并行編程

2018-06-14 09:38:53

Linux多核編程

2022-04-26 08:41:38

Swift并發系統iOS

2010-06-07 08:43:46

.NET 4并行編程

2012-10-10 09:14:50

PHPRPCPHP框架

2022-10-20 23:15:10

PostgreSQL算法機制

2024-04-07 09:04:18

Parallel 類編程工具.NET
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产成人在线观看| 欧美午夜电影在线观看| 天天av综合| 九九热在线精品视频| 亚洲ww精品| 久久精品视频在线播放| 丁香亚洲综合激情啪啪综合| 91社区在线| 久久乐国产精品| 激情五月播播久久久精品| 日本中文视频| 国产亚洲情侣一区二区无| 91精品视频网| 26uuu国产日韩综合| 免费看美女视频在线网站| 无码免费一区二区三区免费播放| 成人天堂入口网站| 99精品视频在线免费播放| 美女精品一区二区| 欧美肥婆姓交大片| 日本免费不卡一区二区| 亚洲视频欧洲视频| 国产欧美一区二区白浆黑人| 日本不卡一二三| 久久大大胆人体| 国产综合自拍| 日韩在线视频在线观看| 欧美性生交片4| 亚瑟国产精品| 国产在线精品91| 55av亚洲| 韩国福利视频一区| 亚洲欧洲黄色网| www.爱久久| 日本黄色播放器| 亚洲成人av中文| 久久人体av| 中文字幕在线亚洲三区| 一区二区三区四区激情| 成人影欧美片| 黄色成人免费网| 香蕉网站在线观看| 国产在线播放精品| 久久网福利资源网站| 久久99国内| 99久久国产宗和精品1上映 | 国产又粗又爽又黄的视频| 精品久久久久久国产91| 波多野结衣在线一区二区| 免费福利片在线观看| 欧美大片黄色| 尤物网站在线| 欧美成人三级| 欧美做爰性生交视频| 国产精品主播直播| 白浆在线视频| 国产一区二区视频播放| 久久精品国产69国产精品亚洲| 激情亚洲综合在线| 中文字幕21页在线看| 成人免费看黄网站| 国产精品自产拍高潮在线观看| 日韩和的一区二在线| 欧美性xxxxxxx| 香蕉精品视频在线观看| 成人在线观看网站| 亚洲v日韩v欧美v综合| 亚洲女同精品视频| 国产日韩综合av| 天天超碰亚洲| 亚洲精品一区二区三区樱花| 亚洲网友自拍| 51xx午夜影福利| 麻豆91精品91久久久的内涵| 国产亚洲黄色片| 精品亚洲一区二区| 久久久久久久久蜜桃| 你懂的网址国产 欧美| 天堂电影一区| 在线中文字幕资源| 野外做受又硬又粗又大视频√| 91精品国产精品| 亚洲三级电影网站| 国产精品成人在线| 成人动漫视频在线观看完整版 | 中国国产一级毛片| 97人人模人人爽人人少妇| 一本色道久久88精品综合| 亚洲一本大道在线| 成人午夜精品一区二区三区| 精品免费视频| 亚洲日本成人网| 欧美精品18videos性欧| 一级黄色在线| 亚洲精品一区二区三区蜜桃久| 91成人天堂久久成人| 亚洲成人999| 色欧美日韩亚洲| 中文字幕亚洲电影| 99在线精品观看| 麻豆视频一区二区| 成人亚洲在线观看| 亚洲综合不卡| 免费成人高清在线视频theav| 欧美日韩在线观看一区二区三区 | 视频三区在线观看| 先锋影音成人资源| 免费看a级黄色片| 欧美成人精品免费| 久久久久福利视频| 亚洲看片网站| 一区二区三区久久网| 国产精品自在线| 欧美va在线观看| 欧美特黄一区| 不卡一区二区三区视频| 欧美美女一区二区| 1000部国产精品成人观看| 国产亚洲一本大道中文在线| 国产成人综合网站| 国产成人丝袜美腿| 国产亚洲成av人在线观看导航| 国产99久久久国产精品| 91丨九色丨国产丨porny| 成人精品高清在线| 毛片毛片毛片毛片| 欧美一区=区三区| 超碰91人人草人人干| 欧美成人在线直播| 欧美日韩一区中文字幕| 日韩亚洲国产中文字幕欧美| 亚洲视频一区二区三区| 国内精品久久久久伊人av| 国产精品爽爽ⅴa在线观看| 91网免费观看| 国产精品日韩在线播放| 好吊一区二区三区| 亚洲一区二区免费视频| 中文字幕在线视频免费观看| 自拍另类欧美| 国产精品swag| 日韩一区免费观看| 99热最新网址| 国语对白在线刺激| 美女日韩一区| 奇米精品一区二区三区在线观看一| 丁香婷婷综合网| 懂色av一区二区三区| 在线观看亚洲区| 亚洲男人的天堂在线观看| 尤物免费看在线视频| 成人综合一区| 免费yellow网站| 亚洲欧洲日产国码无码久久99 | 欧美日本一道本| 欧美二区在线播放| 超碰97免费观看| 国产丝袜在线播放| 亚洲美女视频| 国产精品电影院| 亚洲精品成人影院| 亚洲羞羞网站| 久久精品伊人| 欧美电影一二区| 国产精品不卡一区二区三区| 亚洲片在线资源| 午夜欧美一区二区三区免费观看| 在线视频国产三级| 自拍偷拍欧美一区| 综合亚洲深深色噜噜狠狠网站| 日韩视频永久免费观看| 免费cad大片在线观看| 日本精品性网站在线观看| 国产极品嫩模在线观看91精品| 久久久噜久噜久久综合| 久久91精品国产91久久久| 国内精品模特av私拍在线观看 | 国产精品亚洲一区二区三区妖精 | 国产女同一区二区| 国产精品日韩成人| 国产精品免费一区二区三区四区| 日本高清不卡aⅴ免费网站| 色婷婷精品久久二区二区蜜臀av| 欧美乱人伦中文字幕在线| 成年人视频在线免费| 欧美性生活一级片| 亚洲亚洲精品在线观看| 精品乱码一区| 福利一区二区| 五月综合激情网| 欧美日本韩国在线| 欧美理论影院| 中文字幕免费在线| 欧美精品自拍视频| 欧美呦呦网站| 极品尤物一区| 中文字幕永久在线不卡| 国产在线精品一区免费香蕉 | 国产一区二区三区三区在线观看 | 亚洲专区在线视频|