当我们调用一个函数的时候,如果这个函数的执行过程是很耗时的,我们就必须要等待,但是我们有时候并不急着要这个函数返回的结果。因此,我们可以让被调者立即返回,让他在后台慢慢的处理这个请求。对于调用者来说,则可以先处理一些其他事情,在真正需要数据的时候再去尝试获得需要的数据(这个真正需要数据的位置也就是上文提到的阻塞点)。这也是Future模式的核心思想:异步调用。
到了这里,你可能会想CountDownLatch不是也可以实现类似的功能的吗?也是可以让耗时的任务通过子线程的方式去执行,然后设置一个阻塞点等待返回的结果,情况貌似是这样的!但有时发现CountDownLatch只知道子线程的完成情况是不够的,如果在子线程完成后获取其计算的结果,那CountDownLatch就有些捉襟见衬了,所以JDK提供的Future类,不仅可以在子线程完成后收集其结果,还可以设定子线程的超时时间,避免主任务一直等待。
看到这里,似乎恍然大悟了!CountDownLatch无法很好的洞察子线程执行的结果,使用Future就可以完成这一操作,那么Future何方神圣!下边我们就细细聊一下。
分类:
编程语言 时间:
2019-05-14 00:51:21
阅读次数:
171
Join 方法可以使当前线程等待子线程,如果子线程未结束,则会一致处在wait状态。 因为其内部是通过wait 方法实现的,当执行完毕后会调用notifyAll 释放锁。 CountDownLatch 允许一个或多个线程等待其他线程完成操作,相比join ,能做的事情更多。 输出: 由结果看出,实现 ...
分类:
编程语言 时间:
2019-05-11 00:08:48
阅读次数:
236
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Se ...
分类:
编程语言 时间:
2019-05-10 16:38:44
阅读次数:
157
调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行。也可以传入时间,表示时间到之后,count还没有为0的时候,就会继续执行。 ...
分类:
编程语言 时间:
2019-05-09 10:55:20
阅读次数:
559
CountDownLatch 这个类使用起来比较简单.使用场景就是 你需要很多线程执行结束之后才执行最后的代码,那用这个就对了. 这个类底层是用aqs来实现的. 这类主要使用的方法 count.await(); count.countDown(); 里面的API很少 结束线程await() 1.co ...
分类:
其他好文 时间:
2019-05-06 14:35:56
阅读次数:
127
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Se ...
分类:
编程语言 时间:
2019-05-05 11:54:34
阅读次数:
159
CountDownLatch ? Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 ? CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作 之前,它允许一个或多个线程一直等待。 ? 闭锁可以延迟线程的进度直到 ...
分类:
其他好文 时间:
2019-04-30 01:29:12
阅读次数:
161
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Se ...
分类:
其他好文 时间:
2019-04-29 20:55:43
阅读次数:
106
package com.example.test; import java.net.URL;import java.net.URLConnection;import java.util.concurrent.CountDownLatch; /** * Created with IDEA * auth ...
分类:
编程语言 时间:
2019-04-26 20:59:40
阅读次数:
184
CyclicBarrier: 适合的业务场景,比如 1)、,现有一大任务,需要得到全年的统计数据的,这个工作量是巨大的,那么可以将其分割为12个月的子任务,各个子任务相互独立,当所有子任务完成了,则就可以进行全年统计了,这样大大提升了统计效率。 2)、大家一起去郊游,由于大家住的地方比较分散,故需要 ...
分类:
其他好文 时间:
2019-04-26 17:56:59
阅读次数:
117