`

Guava对Future的支持(回调)

阅读更多

//1.使用Callable返回执行结果(获取返回值get()是阻塞方法)
public class FutureTest {
public static void main(String[] args) throws Exception{
FutureTask<String> future = new FutureTask<String>(new CallableTask("hi"));
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(future);
System.out.println("提交任务 "+new Date());

Thread.sleep(1000);
System.out.println("任务执行结果:" + future.get() + new Date()); //get()阻塞
System.out.println("game over!");
executor.shutdown();
}
}

class CallableTask implements Callable<String>{
private String para;
public String call() throws Exception {
StringBuffer sb = new StringBuffer();
for(int i=0;i<10;i++) {
sb.append(para);
Thread.sleep(300);
}
return sb.toString();
}
public CallableTask(String para) {
this.para=para;
}
}

2.Guava对Future的支持(增加listener):Future的执行并没有阻塞主线程
public class GuavaFutureTest {

public static void main(String[] args) {
ExecutorService exe = Executors.newFixedThreadPool(5);
ListeningExecutorService service = MoreExecutors.listeningDecorator(exe);
final ListenableFuture<String> task = service.submit(new CallableTask("how"));

Runnable result = new Runnable() {
public void run() {
System.out.println("异步处理成功");
try {
System.out.println(task.get());
} catch (Exception e) {
e.printStackTrace();
}
}
};
//增加监听器
task.addListener(result, MoreExecutors.directExecutor());
System.out.println("game over");
}
}

(2)增加对异常的处理
public class GuavaFutureTest2 {

public static void main(String[] args) {
ExecutorService exe = Executors.newFixedThreadPool(5);
ListeningExecutorService service = MoreExecutors.listeningDecorator(exe);
ListenableFuture<String> task = service.submit(new CallableTask("how"));
FutureCallback callback = new FutureCallback<String>() {
public void onFailure(Throwable e) {
System.out.println("异步处理失败:"+e.getMessage());
}
public void onSuccess(String s) {
System.out.println("异步处理成功");
}
};
Futures.addCallback(task, callback, MoreExecutors.newDirectExecutorService());
System.out.println("game over");
}
}


0
0
分享到:
评论

相关推荐

    Guava-并行编程Futures详解.pdf

    6. `JdkFutureAdapters.listenInPoolThread(future)`:此方法将标准的JDK Future转换为Guava的ListenableFuture,并在指定的线程池中执行回调,提供了更好的异步控制。 以下是一个简单的测试示例,展示了如何使用...

    guava-API文档

    例如,ListenableFuture接口允许添加回调函数,当异步操作完成时会自动触发。 4. 字符串处理:Guava包含了一些方便的字符串处理方法,如Joiner和Splitter,它们可以更方便地进行字符串的连接和分割操作。此外,...

    guava学习知识点

    - `ListenableFuture`:异步操作完成后回调的接口,增强了 Future 的能力。 - `Service`:简化服务的启动、停止和状态管理。 7. **Strings** - 提供了丰富的字符串处理工具,如拆分、连接、填充等。 8. **...

    Getting start with guava

    - **`ListenableFuture`**:扩展了标准Java中的`Future`接口,提供了更丰富的回调机制。 - **`RateLimiter`**:用于限制执行速度,避免资源过度消耗。 ##### 4. 字符串处理 - **`Joiner`**:将集合或数组转换为...

    Guava 16.0 API (CHM格式)

    ListenableFuture(可监听的Future): Futures,用于异步完成的回调。  2. Service: 控制事件的启动和关闭,为你管理复杂的状态逻辑。  六. Strings: 一个非常非常有用的字符串工具类: 提供 splitting,joining,...

    guava代码展示

    10. **异步计算**:ListenableFuture接口扩展了Java的Future,增加了注册回调的能力,使得异步结果处理更加灵活。 Guava的学习笔记.docx文件可能包含了对以上概念的详细解释和示例代码,而未命名的压缩包子文件可能...

    开源架包guava

    ListenableFuture接口允许添加回调函数,当异步任务完成时自动执行。Futures类则提供了一系列方法,用于组合、转换和管理Future对象。 Guava对原生类型的支持,如Ints、Longs和Booleans,提供了更方便的操作方法,...

    guava,google项目名称、集合、缓存、原语支持、并发库、公共注释、字符串处理、i/o。美国石油学会.zip

    开发者可以自定义缓存的大小、过期策略,以及在缓存项被移除时的回调函数,从而在内存管理上具有更大的灵活性。 3. 原语支持:Guava为基本数据类型(如int、long和double)提供了专门的集合类,减少了装箱拆箱操作...

    Guava - 并行编程Futures详解

    6. **JdkFutureAdapters.listenInPoolThread**: 此方法用于将JDK的Future转换为Guava的ListenableFuture,并在指定的Executor中执行回调。这使得在不同类型的Future之间进行互操作变得简单。 下面是一个简单的测试...

    future:Java、Guava 和 Scala 中的 Furures 和 promise

    `ListenableFuture.addCallback()` 方法允许我们注册回调函数,这样当 Future 完成时(无论成功还是失败),回调函数都会被调用。这为异步编程提供了更加灵活的事件驱动模型。 Scala 的 Futures 和 Promises 则是其...

    Guava:Guava Google模块

    ListenableFuture允许开发者注册回调函数,当异步操作完成时会自动执行。Futures则提供了一系列方法来管理Future对象,如检查是否完成、取消任务、组合多个Future等。Service接口则为启动、停止服务提供了一致的抽象...

    RateLimit-使用guava来做接口限流代码示例

    ListenableFuture 是 Guava 库中的一种 Future 实现,它可以监听 Future 的完成状态,并在完成时执行回调函数。ListenableFuture 是对 Java 原生 Future 的扩展增强,可以减少并发程序的复杂度。 ListenableFuture ...

    CompletedFuture

    - **Java 8 CompletableFuture**:Java 8 中引入了 `CompletableFuture` 类,它继承自 `Future` 接口,提供了更多的高级功能,比如组合多个任务的能力、异常处理以及更加丰富的回调机制等。 接下来,我们将通过具体...

    Async-http-client

    1. **异步编程模型**:与传统的HTTP客户端不同,Async-http-client基于Java的Future和Callback接口,实现了事件驱动和回调机制。这意味着发送请求不会阻塞当前线程,而是立即返回,当请求完成时通过回调函数通知用户...

    Test_fconst_0.rar_The Test

    如果你有一个`ListenableFuture`实例,你可以注册回调函数,当未来任务完成(成功、失败或被取消)时,这些回调函数会被触发。这种设计模式使得代码更加异步友好,可以实现非阻塞式的事件处理,提高了程序的响应速度...

    Java Concurrency In Practice Learning Note

    例如,`com.google.common.util.concurrent`包下提供了线程安全的`ListenableFuture`,它扩展了`Future`接口,允许添加完成时的回调,增强了异步编程的能力。此外,Guava的`LoadingCache`是缓存的实现,它支持自动...

    如何利用Java开发高性能、高并发Web应用

    Java 8引入了CompletableFuture,进一步简化了异步编程,支持链式调用和回调。 5. **响应式编程**: Reactor、Volley等库提供了响应式编程模式,可以处理大量并发请求,通过流式API实现事件驱动和数据流的处理,...

    AsyncHttpClient所需的jar包

    4. **回调机制**:在请求完成后,AsyncHttpClient会调用预先注册的回调函数,这使得程序可以在不阻塞主线程的情况下执行其他任务。 5. **支持HTTP/1.1和HTTP/2**:AsyncHttpClient支持最新的HTTP协议标准,包括连接...

    async-http-client-2.0.13.zip

    4. **回调机制**: 使用Future和Callback接口,用户可以定义请求完成后的处理逻辑,实现异步结果的获取,避免了阻塞主线程。 5. **线程池管理**: 内置的线程池管理机制,可以根据系统负载动态调整工作线程数量,...

    java8看不到源码-NioSmtpClient:基于Netty的smtp客户端

    java8 看不到源码NioSmtp客户端 基于 .Java 的高性能 SMTP 客户端。 该客户端在 HubSpot 中经过充分测试并大量使用。...调用未知函数(即回调或事件侦听器)应始终在隔离的线程池上完成。 还应该避

Global site tag (gtag.js) - Google Analytics