上一篇主要讲了任务的编排该如何实现,包括串、并、串并结合。建议一定要手写个小demo去尝试各种基本组合。

这一篇主要是讲该如何实现异步回调。

如果之前有用过netty的应该知道,netty里大量充斥着“回调”,各种addListener,将各种耗时任务变成了异步带回调的模式。

回调是个很有用的模式,譬如我的主线程执行过程中,要执行一个非常耗时的逻辑,自然我们会想到用异步的形式去完成这个耗时逻辑,新建个线程,让它去一边执行就好了,只要不阻塞我的主线程。但问题来了,异步执行没毛病,执行成功、失败后出结果了,该怎么通知主线程?

我假设读者你深思熟虑了10分钟,然后想到了、或者没想到实现方式。

我们来看正文了。

Jdk的Future不便之处

Java的Future某种程度上来说是用来解决异步问题的,它让你在发起一个异步任务时,迅速能在主线程得到一个Future对象,通过该对象,就可以去获取到异步任务的执行结果。

但是有一个比较尴尬的问题,就是当你想获取异步执行结果时,要通过future.get()方法,这一步还是阻塞的!而且我们无法确定到底异步任务何时执行完毕,提前get了,就还是阻塞,get晚了,可能会漏掉执行结果,写个死循环,不停去轮询是否执行完毕,又浪费资源。所以,这个Future并不好用。

先来看一下Java的future使用:

代码块
import java.util.concurrent.*; /** * @author wuweifeng wrote on 2019-12-10 *
@version 1.0 */ public class Test { public static void main(String[] args)
throws ExecutionException, InterruptedException { //创建线程池 ExecutorS

技术
©2019-2020 Toolsou All rights reserved,
java实现抢红包功能AndroidStudio开发笔记1--第一个appMybatis错误解决:There is no getter for property named '*' in 'class Java.lang.String单个按键控制多种流水灯状态用Python做自动化测试(pytest框架的精髓)关于keras使用fit_generator中遇到StopIterationMySQL面试必会!Python基础知识整理笔记Redis队列实现java秒杀系统,无脚本,可用于生产崮德好文连载 - 活该你是工程师(自序)