当前位置: 首页 > news >正文

guava 并发

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

概念

        ListenableFuture顾名思义就是可以监听的Future,它是对java原生Future的扩展增强。我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果。如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。这样做,代码复杂,而且效率低下。使用ListenableFuture Guava帮我们检测Future是否完成了,如果完成就自动调用回调函数,这样可以减少并发程序的复杂度。

代码:

import com.google.common.util.concurrent.*;
import java.util.concurrent.*;
/**
 * Created by admin on 2016/4/27.
 */
public class ExcutorEngineTest {
    public static void main(String[] args) throws Exception {
        ListeningExecutorService executorService = MoreExecutors
            .listeningDecorator(MoreExecutors
                .getExitingExecutorService(new ThreadPoolExecutor(10, 100,
                    3000, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>())));
        ListenableFuture<Integer> future = executorService.submit(new Task("test"));
        System.out.println("future:" + future.get());
        Futures.addCallback(future, new FutureCallback<Integer>() {
            @Override
            public void onSuccess(Integer result) {
                System.out.println("result" + result);
            }
            @Override
            public void onFailure(Throwable t) {
                System.err.println("error");
            }
        });
    }
    static class Task implements Callable<Integer>{
        String str;
        public Task(String str){
            this.str = str;
        }
        @Override
        public Integer call() throws Exception {
            System.out.println("call excute...." + str);
            return 8;
        }
    }
}

--------------------

执行结果:

call excute....test

future:8

result8


转载于:https://my.oschina.net/u/131940/blog/667230

相关文章:

  • Oauth2是个什么东西?
  • [javaSE] 看知乎学习工厂模式
  • 数据库分库分表扫盲,不会用也得知道概念
  • 写了那么久的String字符串,你可能根本不懂它!
  • 2012 借教室
  • 怎样才能写出规范的好代码?
  • 让Android Studio支持系统签名
  • 详解Java中的BIO、NIO、AIO
  • 取经阿里十年技术大佬,得到Java线上问题排查攻略!
  • Understanding memory usage on Linux
  • Java中的拦截器和过滤器有什么区别
  • 为什么要引入分布式任务调度系统?
  • 为什么说datax是目前最好的异构数据源数据交换工具
  • Java常用关键字:this、super、final、static、访问修饰符
  • JAVA UUID 生成唯一标识
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android单元测试 - 几个重要问题
  • conda常用的命令
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ESLint简单操作
  • github从入门到放弃(1)
  • gops —— Go 程序诊断分析工具
  • java多线程
  • Java深入 - 深入理解Java集合
  • Linux下的乱码问题
  • log4j2输出到kafka
  • magento2项目上线注意事项
  • nodejs实现webservice问题总结
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Web Storage相关
  • 第2章 网络文档
  • - 概述 - 《设计模式(极简c++版)》
  • 机器学习 vs. 深度学习
  • 精彩代码 vue.js
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 排序算法之--选择排序
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 说说动画卡顿的解决方案
  • 运行时添加log4j2的appender
  • 智能合约Solidity教程-事件和日志(一)
  • 自制字幕遮挡器
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 进程与线程(三)——进程/线程间通信
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • %check_box% in rails :coditions={:has_many , :through}
  • ( 10 )MySQL中的外键
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C++17) optional的使用
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (八)Flask之app.route装饰器函数的参数
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (转) 深度模型优化性能 调参
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)