Guava之ListenableFuture(实现Java异步)

2024-06-10 02:32

本文主要是介绍Guava之ListenableFuture(实现Java异步),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*还记得我之前转载的一篇文章吗?
http://blog.csdn.net/u011499747/article/details/50725131
但是这个实现的异步不是不能实现复杂的链式回调。*

0.回顾jdk自带的future

实验代码:

package com.dubby.guava.future;import java.util.concurrent.*;/*** Created by dubby on 16/3/28.*/
public class JDKFuture {public static void main(String[] args) throws Exception{ExecutorService pool = Executors.newFixedThreadPool(3);Future<String> future = pool.submit(new Callable<String>() {public String call() throws Exception {try {Thread.sleep(1000);} catch (Exception e){e.printStackTrace();}return "JDK Normal future result";}});String result = future.get();System.out.println(result);pool.shutdown();}
}

get方法会堵塞,如果要用到这个结果,还是需要堵塞当前线程。

1.guava的ListenableFuture

实验代码:

package com.dubby.guava.future;import com.google.common.util.concurrent.*;import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;/*** Created by dubby on 16/3/28.*/
public class ListenerFutureDemo {public static void main(String[] args) {final CountDownLatch latch = new CountDownLatch(1);ListeningExecutorService pool = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(3));ListenableFuture<String> listenableFuture = pool.submit(new Callable<String>() {public String call() throws Exception {try{Thread.sleep(1000);} catch (Exception e){e.printStackTrace();}return "Guava Listening future result";}});Futures.addCallback(listenableFuture, new FutureCallback<String>() {public void onSuccess(String s) {latch.countDown();System.out.println(s);}public void onFailure(Throwable throwable) {System.out.println(throwable.getMessage());}});try {latch.await();} catch (InterruptedException e) {e.printStackTrace();}pool.shutdown();}
}

2.代码解释

2.1 装饰者模式获得ListeningExecutorService。

2.2 ListenableFuture listenableFuture = pool.submit()获得ListenableFuture。

2.3 Futures.addCallback()设置回调函数。

这篇关于Guava之ListenableFuture(实现Java异步)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046983

相关文章

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Python实现剪贴板历史管理器

《Python实现剪贴板历史管理器》在日常工作和编程中,剪贴板是我们使用最频繁的功能之一,本文将介绍如何使用Python和PyQt5开发一个功能强大的剪贴板历史管理器,感兴趣的可以了解下... 目录一、概述:为什么需要剪贴板历史管理二、功能特性全解析2.1 核心功能2.2 增强功能三、效果展示3.1 主界面

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

Java 如何创建和使用ExecutorService

《Java如何创建和使用ExecutorService》ExecutorService是Java中用来管理和执行多线程任务的一种高级工具,可以有效地管理线程的生命周期和任务的执行过程,特别是在需要处... 目录一、什么是ExecutorService?二、ExecutorService的核心功能三、如何创建