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

Guava并發:ListenableFuture與RateLimiter示例

開發 后端
ListenableFuture顧名思義就是可以監聽的Future,它是對java原生Future的擴展增強 RateLimiter類似于JDK的信號量Semphore,他用來限制對資源并發訪問的線程數,本文介紹RateLimiter使用。

概念

ListenableFuture顧名思義就是可以監聽的Future,它是對java原生Future的擴展增強。我們知道Future表示一個異步計算任務,當任務完成時可以得到計算結果。如果我們希望一旦計算完成就拿到結果展示給用戶或者做另外的計算,就必須使用另一個線程不斷的查詢計算狀態。這樣做,代碼復雜,而且效率低下。使用ListenableFuture Guava幫我們檢測Future是否完成了,如果完成就自動調用回調函數,這樣可以減少并發程序的復雜度。

推薦使用第二種方法,因為第二種方法可以直接得到Future的返回值,或者處理錯誤情況。本質上第二種方法是通過調動***種方法實現的,做了進一步的封裝。

另外ListenableFuture還有其他幾種內置實現:

1.SettableFuture:不需要實現一個方法來計算返回值,而只需要返回一個固定值來做為返回值,可以通過程序設置此Future的返回值或者異常信息。

 

2.CheckedFuture: 這是一個繼承自ListenableFuture接口,他提供了checkedGet()方法,此方法在Future執行發生異常時,可以拋出指定類型的異常。

 

 

RateLimiter類似于JDK的信號量Semphore,他用來限制對資源并發訪問的線程數,本文介紹RateLimiter使用。

代碼示例

  1. import java.util.concurrent.Callable;  
  2. import java.util.concurrent.ExecutionException;  
  3. import java.util.concurrent.Executors;  
  4. import java.util.concurrent.TimeUnit;  
  5.    
  6. import com.google.common.util.concurrent.FutureCallback;  
  7. import com.google.common.util.concurrent.Futures;  
  8. import com.google.common.util.concurrent.ListenableFuture;  
  9. import com.google.common.util.concurrent.ListeningExecutorService;  
  10. import com.google.common.util.concurrent.MoreExecutors;  
  11. import com.google.common.util.concurrent.RateLimiter;  
  12.    
  13. public class ListenableFutureDemo {  
  14.     public static void main(String[] args) {  
  15.         testRateLimiter();  
  16.         testListenableFuture();  
  17.     }  
  18.    
  19.     /**  
  20.      * RateLimiter類似于JDK的信號量Semphore,他用來限制對資源并發訪問的線程數  
  21.      */ 
  22.     public static void testRateLimiter() {  
  23.         ListeningExecutorService executorService = MoreExecutors  
  24.                 .listeningDecorator(Executors.newCachedThreadPool());  
  25.    
  26.         RateLimiter limiter = RateLimiter.create(5.0); // 每秒不超過4個任務被提交  
  27.    
  28.         for (int i = 0; i < 10; i++) {  
  29.             limiter.acquire(); // 請求RateLimiter, 超過permits會被阻塞  
  30.    
  31.             final ListenableFuture<Integer> listenableFuture = executorService  
  32.                     .submit(new Task("is "+ i));  
  33.         }  
  34.     }  
  35.    
  36.     public static void testListenableFuture() {  
  37.         ListeningExecutorService executorService = MoreExecutors  
  38.                 .listeningDecorator(Executors.newCachedThreadPool());  
  39.    
  40.         final ListenableFuture<Integer> listenableFuture = executorService  
  41.                 .submit(new Task("testListenableFuture"));  
  42.    
  43.            
  44.         //同步獲取調用結果  
  45.         try {  
  46.             System.out.println(listenableFuture.get());  
  47.         } catch (InterruptedException e1) {  
  48.             e1.printStackTrace();  
  49.         } catch (ExecutionException e1) {  
  50.             e1.printStackTrace();  
  51.         }  
  52.            
  53.         //***種方式  
  54.         listenableFuture.addListener(new Runnable() {  
  55.             @Override 
  56.             public void run() {  
  57.                 try {  
  58.                     System.out.println("get listenable future's result " 
  59.                             + listenableFuture.get());  
  60.                 } catch (InterruptedException e) {  
  61.                     e.printStackTrace();  
  62.                 } catch (ExecutionException e) {  
  63.                     e.printStackTrace();  
  64.                 }  
  65.             }  
  66.         }, executorService);  
  67.    
  68.         //第二種方式  
  69.         Futures.addCallback(listenableFuture, new FutureCallback<Integer>() {  
  70.             @Override 
  71.             public void onSuccess(Integer result) {  
  72.                 System.out  
  73.                         .println("get listenable future's result with callback " 
  74.                                 + result);  
  75.             }  
  76.    
  77.             @Override 
  78.             public void onFailure(Throwable t) {  
  79.                 t.printStackTrace();  
  80.             }  
  81.         });  
  82.     }  
  83. }  
  84.    
  85. class Task implements Callable<Integer> {  
  86.     String str;  
  87.     public Task(String str){  
  88.         this.str = str;  
  89.     }  
  90.     @Override 
  91.     public Integer call() throws Exception {  
  92.         System.out.println("call execute.." + str);  
  93.         TimeUnit.SECONDS.sleep(1);  
  94.         return 7;  
  95.     }  

Guava版本

  1. <dependency> 
  2.             <groupId>com.google.guava</groupId> 
  3.             <artifactId>guava</artifactId> 
  4.             <version>14.0.1</version> 
  5.         </dependency> 

本文出自:http://my.oschina.net/cloudcoder/blog/359598

責任編輯:林師授 來源: oschina
相關推薦

2022-06-22 09:07:09

Guava算法

2024-12-02 08:02:36

2025-11-28 01:45:00

2021-05-21 12:36:16

限流代碼Java

2024-01-31 08:50:41

Guava并發工具

2023-10-31 07:52:10

2024-09-09 11:35:35

2024-10-18 16:58:26

2021-06-09 11:41:10

RateLimiterJava代碼

2024-04-10 08:16:20

多線程編程Java并發編程

2024-05-24 14:35:49

2021-05-31 07:01:46

限流算法令牌

2025-03-26 03:25:00

SpringGuavaCaffeine

2024-08-29 08:28:17

2009-07-03 17:44:06

JSP介紹

2009-07-09 16:22:12

WebWork配置

2023-07-06 08:06:47

LockCondition公平鎖

2021-06-07 17:51:29

并發高并發編程

2023-01-15 17:24:16

LinuxBSDwhereis?命令

2023-01-10 14:10:27

Linuxwho 命令
點贊
收藏

51CTO技術棧公眾號

国产精品免费久久久久影院| 国产伦精品一区二区三区免费视频| 婷婷六月激情| 老司机一区二区| 亚洲一区二区三区视频播放| 老牛国内精品亚洲成av人片| 国产一区二区av| 蜜桃视频www网站在线观看| 91精选在线观看| yiren22综合网成人| 亚洲国产精品精华液网站| 色婷婷综合网站| 国产女同互慰高潮91漫画| 被灌满精子的波多野结衣| 精品一区二区三区视频在线观看| 日本一区二区三区免费观看| 国产日韩一区| 日韩欧美亚洲日产国| 日本午夜一区二区| 中文字幕欧美日韩一区二区三区| 日韩不卡一区二区三区| 日韩久久在线| 久草精品在线观看| 男人j进女人j| 94色蜜桃网一区二区三区| 日本wwww视频| 最新欧美精品一区二区三区| 成年人福利视频| 亚洲国产精品久久艾草纯爱| 日本成人一区| 91精品国产全国免费观看| 超碰在线caoporen| 国产视频精品久久久| 亚洲一区资源| 久久国产精品99国产精| 色天下一区二区三区| 成人国产精品久久久久久亚洲| 在线国产一区| 日韩精品久久一区| 国产69精品久久99不卡| 北条麻妃av高潮尖叫在线观看| 中文av一区二区| 污污的网站在线观看| 日韩免费成人网| 精品无人乱码一区二区三区| 久久精品视频va| 亚洲精品亚洲人成在线观看| 成人激情视频在线| 免费亚洲一区| 穿情趣内衣被c到高潮视频| 国产日本欧美一区二区| 亚洲一区二区三区精品中文字幕| 欧美丰满少妇xxxxx高潮对白| 日韩深夜视频| 久久免费精品视频| 欧美深夜福利| 国产va亚洲va在线va| 一区二区三区精品在线| 直接在线观看的三级网址| 日韩中文字幕欧美| 93在线视频精品免费观看| 日日骚一区二区网站| 久久久精品日韩欧美| 国产精品秘入口| 亚洲人成在线观看| 久久93精品国产91久久综合| 免费亚洲精品视频| 欧美国产综合色视频| av在线第一页| 欧美成年人在线观看| 亚洲高清自拍| 少妇黄色一级片| 日韩女优av电影| 亚洲欧美tv| 在线观看成人免费| 亚洲精品中文字幕乱码三区| 成人看av片| 欧美在线视频免费| 视频一区二区中文字幕| 色综合97天天综合网| 亚洲丁香久久久| 999成人网| 可以在线看的黄色网址| 91超碰这里只有精品国产| 亚洲午夜免费| 亚洲国产精品综合| 欧美性极品xxxx做受| 电影中文字幕一区二区| 国新精品乱码一区二区三区18| 国产日韩影视精品| 欧美激情网站| 高清视频在线观看一区| 国产精品麻豆久久久| 麻豆理论在线观看| 俄罗斯精品一区二区三区| 国产精品久久毛片a| aa国产成人| 成人综合色站| 一区二区三区蜜桃| 精品视频成人| 日韩视频在线免费播放| 欧美丝袜自拍制服另类| 欧美理论电影在线精品| 91免费黄视频| 精品久久久久久无| 婷婷综合网站| www.男人的天堂.com| 日韩视频在线观看免费| 日本aⅴ精品一区二区三区| 视频一区二区三区国产| 欧美又大粗又爽又黄大片视频| 国产福利视频一区二区三区| 成人video亚洲精品| 成人av免费看| 欧美特级www| 视频在线不卡免费观看| 毛片网站大全| 91超碰中文字幕久久精品| 99精品视频在线观看| 3d性欧美动漫精品xxxx软件| 日本一区二区在线视频观看| 欧美日韩五月天| 激情丁香综合| 国产美女视频一区二区三区 | www.成人精品免费网站青椒| 久久综合国产精品台湾中文娱乐网| 美女视频一区二区三区| 日本高清在线观看| 欧美人与物videos另类| 欧美剧在线免费观看网站| 黄色亚洲在线| 在线免费观看的av网站| 国产免费一区二区三区| 一本色道久久综合精品竹菊| 久久中文字幕二区| 在线黄色.com| www.久久爱.cn| 欧美日韩一区二区在线观看| 亚洲福利一区| 国产蜜臀在线| 欧美乱做爰xxxⅹ久久久| 中文字幕在线观看日韩| 白白色 亚洲乱淫| 国产一区二区三区视频在线| 日韩一级免费在线观看| 午夜精品免费视频| 亚洲妇女屁股眼交7| 欧美午夜一区二区福利视频| 黄色片免费在线观看| 成人手机视频在线| 精品精品国产国产自在线| 久久综合久久综合亚洲| 同性恋视频一区| 男人的天堂在线免费视频| 鲁丝一区二区三区免费| 国产婷婷色综合av蜜臀av| caoporn国产精品| 亚瑟一区二区三区四区| wwwxxx在线观看| 黄色a级在线观看| 欧美激情一级欧美精品| 性久久久久久久久| 亚洲欧美日韩一区在线观看| 欧美二三四区| 三上悠亚在线一区二区| 91免费福利视频| 亚洲成人xxx| 中文字幕av一区二区三区免费看| 欧美成人milf| 国产福利片在线观看| 激情综合网俺也去| 成人在线免费观看一区| 夜夜躁日日躁狠狠久久88av| 一区二区视频在线看| 久久精品动漫| 国产图片一区| 快射av在线播放一区| 日韩黄色片视频| 99国产超薄肉色丝袜交足的后果| 亚洲精品一区二区久| 亚洲综合一二三区| 精品中文字幕一区二区小辣椒| 豆花视频一区二区| 调教视频免费在线观看| 欧美日韩在线一| 国产精品一区二区三区在线 | 91成品人片a无限观看| 欧美午夜视频网站| av一区二区三区在线| 久久久综合色| 性欧美hd调教| 精品推荐蜜桃传媒| 日本精品免费在线观看| 国产精品一区二区三区精品| 欧美成人精品激情在线观看| 678五月天丁香亚洲综合网| 国产精品久久久久久户外露出| 日韩主播视频在线| 青青草综合网| 国产精品视频首页|