0
点赞
收藏
分享

微信扫一扫

completablefuture(completablefuture 详解)


java future如何强制终止

future 咱写的。在任何并发性应用程序中,异步事件处理都至关重要。事件来源可能是不同的计算任务、i/o 操作或与外部系统的交互。无论来源是什么,应用程序代码都必须跟踪事件,协调为响应事件而采取的操作。java 应用程序可采用两种基本的异步事件处理方法:该应用程序有一个协调线程等待事件,然后采取操作,或者事件可在完成时直接执行某项操作(通常采取执行应用程序所提供的代码的方式)。让线程等待事件的方法被称为阻塞 方法。让事件执行操作、线程无需显式等待事件的方法被称为非阻塞 方法。

旧的 java.util.concurrent.future 类提供了一种简单方式来处理预期的事件完成,但仅通过轮询或等待完成的方法。java 8 中添加的 java.util.concurrent.completablefuture 类扩展了此功能,添加了大量合成或处理事件的方法。具体地讲,completablefuture 提供了在事件完成时执行应用程序代码的标准技术,包括各种组合任务(由 future 表示)的方式。这种组合技术使得编写非阻塞代码来处理事件变得很容易(或者至少比过去容易)。

completablefuture(completablefuture 详解)_等待事件

java Future 阻塞

有区别。比如你要查3次,每次分别耗时1s,2s,3s,用单线程,这个线程就会阻塞3次,总共耗时等于这3次查询的总耗时,是6s;而如果用了3个线程来查,每个线程都用Future 的get方法来返回数据,这样就是3个阻塞发生在同一时间,前两个完成了会继续等待第三个查询完成,最终耗时是时间最长的那个查询,是3s。在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。

所以run的返回值是void类型。

如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。

但后者需要前者的结果,就需要用callable接口了。

callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。

线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。

这时候,future就出场了。futrue可以监视目标线程调用call的情况,当你调用future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。在任何并发性应用程序中,异步事件处理都至关重要。事件来源可能是不同的计算任务、I/O 操作或与外部系统的交互。无论来源是什么,应用程序代码都必须跟踪事件,协调为响应事件而采取的操作。Java 应用程序可采用两种基本的异步事件处理方法:该应用程序有一个协调线程等待事件,然后采取操作,或者事件可在完成时直接执行某项操作(通常采取执行应用程序所提供的代码的方式)。让线程等待事件的方法被称为阻塞 方法。让事件执行操作、线程无需显式等待事件的方法被称为非阻塞 方法。

旧的 java.util.concurrent.Future 类提供了一种简单方式来处理预期的事件完成,但仅通过轮询或等待完成的方法。Java 8 中添加的 java.util.concurrent.CompletableFuture 类扩展了此功能,添加了大量合成或处理事件的方法。具体地讲,CompletableFuture 提供了在事件完成时执行应用程序代码的标准技术,包括各种组合任务(由 future 表示)的方式。这种组合技术使得编写非阻塞代码来处理事件变得很容易(或者至少比过去容易)。

举报

相关推荐

0 条评论