一、
1.1、软件结构
C/S 结构:Client/Server,客户端服务器结构。(QQ,迅雷)
B/S 结构:Browser/Server,浏览器服务器结构。(Chrome,火狐)
无限进步
Collection 接口和 Map 接口是所有集合框架的父接口。
Collection 集合的子接口有 List、Set、Queue 三种子接口,比较常用的是 List 接口 和 Set 接口。
List 接口 的实现类主要有:ArrayList(线程不安全)、LinkedList、Stack 以及 Vector(线程安全)等;
Set 接口 的实现类主要有:HashSet、TreeSet、LinkedHashSet 等。
Queue 接口:BlockingQueue
Map 接口 的实现类主要有:HashMap、TreeMap、Hashtable、LinkedHashMap、ConcurrentHashMap 以及 Properties 等。
1 | 感谢 |
ListenableFuture 是由 Google Guava工具包提供的 Future 扩展类,随后,JDK 在 1.8 版本中马上也提供了类似这样的类,在 9 中进一步增强,这就是 CompletableFuture。CompletableFuture 同样实现了 Future 接口,并在此基础上进行了丰富的扩展,弥补了 Future 的局限性,是对 Future 的扩展和增强,同时 CompletableFuture 实现了对任务编排的能力。
ListenableFuture 是 Guava 工具包提供的 Future 扩展类,是可以监听的 Future,是对 Java 原生Future 的扩展增强。
老版 Future 模式一个最大的问题是需要获取结果做后续处理操作的时候,还是需要阻塞等待。这样的话和同步调用方式就没有多大区别了。而 ListenableFuture 和 CompletableFuture 对于这种情况提供了很多易用的 API。
如果使用 ListenableFuture,Guava 会帮助检测 Future 是否完成了,如果完成就自动调用回调函数,这样可以减少并发程序的复杂度。
ListenableFuture 接口扩展了 Future 接口,增加了 addListener 方法,该方法在给定的 excutor 上注册一个监听器,当计算完成时会马上调用该监听器。虽然不能够确保监听器执行的顺序,但可以确保在计算完成时马上被调用。
addListener()
:注册回调函数,在实际使用时可能不会直接使用这个接口,因为这个接口只能传 Runnable 实例,Futures 类提供了另一个 addCallback 方法。
1 | public interface ListenableFuture<V> extends Future<V> { |
1 | class Task implements Callable<String> { |
1 | public void lisFuture() throws ExecutionException, InterruptedException { |
Demo
1 | public static void testListenFuture() { |
MoreExecutors:该类是 final 类型的工具类,提供了很多静态方法。
MoreExecutors.listeningDecorator(ExecutorService delegate)
方法初始化 ListeningExecutorService
;ListeningExecutorService:该类是对 ExecutorService 的扩展,重写 ExecutorService 类中的 submit 方法,返回 ListenableFuture 对象。
ListeningExecutorService
的 submit(Callable<T> var1)
方法即可初始化 ListenableFuture
对象。Futures:该类提供和很多实用的静态方法以供使用。(todo: successfulAsList,AllAsList)
addCallback()
:在线程结束时,立即调用 FutureCallBack()
。
1 | // addCallback源码 |
FutureCallback:该接口提供了 onSuccess()
和 onFailure()
,获取异步计算的结果并回调,ListenableFuture 可以使用以下方式通过重写 onSuccess()
和 onFailure()
增加回调函数:
1 | @GwtCompatible |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true