/*
* Written by Doug Lea with assistance from members of JCP JSR-166
* Expert Group and released to the public domain, as explained at
* http://creativecommons.org/publicdomain/zero/1.0/
*/
package java.util.concurrent;
/**
* A <tt>Future</tt> represents the result of an asynchronous
* computation. Methods are provided to check if the computation is
* complete, to wait for its completion, and to retrieve the result of
* the computation. The result can only be retrieved using method
* <tt>get</tt> when the computation has completed, blocking if
* necessary until it is ready. Cancellation is performed by the
* <tt>cancel</tt> method. Additional methods are provided to
* determine if the task completed normally or was cancelled. Once a
* computation has completed, the computation cannot be cancelled.
* If you would like to use a <tt>Future</tt> for the sake
* of cancellability but not provide a usable result, you can
* declare types of the form {@code Future<?>} and
* return <tt>null</tt> as a result of the underlying task.
*
Future异步计算任务的结果。方法提供了检查计算任务是否完成,等待计算任务完成时,
获取计算任务结果。当计算任务完成时,调用get方法可以获取计算任务结果,如果需要
将阻塞至准备好。我们可以使用cancel取消线程的执行。另外提供了确定任务是否
正常结束或取消的方法。当任务已经完成时,任务不可被取消。
如果我们想取消任务,而不需要获取结果,则我们可以声明类型为Future<?>,
则任务完成返回为null。
* <p>
一些示例
* <b>Sample Usage</b> (Note that the following classes are all
* made-up.) <p>
* <pre> {@code
* interface ArchiveSearcher { String search(String target); }
* class App {
* ExecutorService executor = ...
* ArchiveSearcher searcher = ...
* void showSearch(final String target)
* throws InterruptedException {
* Future<String> future
* = executor.submit(new Callable<String>() {
* public String call() {
* return searcher.search(target);
* }});
* displayOtherThings(); // do other things while searching
* try {
* displayText(future.get()); // use future
* } catch (ExecutionException ex) { cleanup(); return; }
* }
* }}</pre>
*
* The {@link FutureTask} class is an implementation of <tt>Future</tt> that
* implements <tt>Runnable</tt>, and so may be executed by an <tt>Executor</tt>.
* For example, the above construction with <tt>submit</tt> could be replaced by:
FutureTask提供了Future和Runnable的实现,所以也可以用执行器去执行,比如上面submit方法的
Callable构造,我们可以用FutureTask来代理
* <pre> {@code
* FutureTask<String> future =
* new FutureTask<String>(new Callable<String>() {
* public String call() {
* return searcher.search(target);
* }});
* executor.execute(future);}</pre>
*
* <p>Memory consistency effects: Actions taken by the asynchronous computation
* [url=package-summary.html#MemoryVisibility] <i>happen-before</i>[/url]
* actions following the corresponding {@code Future.get()} in another thread.
*
内存一直性:任务的执行发生在获取任务执行的结果之前
* @see FutureTask
* @see Executor
* @since 1.5
* @author Doug Lea
* @param <V> The result type returned by this Future's <tt>get</tt> method
*/
public interface Future<V> {
/**
* Attempts to cancel execution of this task. This attempt will
* fail if the task has already completed, has already been cancelled,
* or could not be cancelled for some other reason. If successful,
* and this task has not started when <tt>cancel</tt> is called,
* this task should never run. If the task has already started,
* then the <tt>mayInterruptIfRunning</tt> parameter determines
* whether the thread executing this task should be interrupted in
* an attempt to stop the task.
*
尝试取消任务的执行。如果任务已经完成,或已经被取消,或者由于其他原因
不能被取消,则尝试失败。如果任务还没有开始,取消方法被调用,则尝试成功,
任务绝对不会执行。当任务已经被执行,mayInterruptIfRunning参数可以决定在尝试
停止任务时,执行中的任务是否可以被中断。
* <p>After this method returns, subsequent calls to {@link #isDone} will
* always return <tt>true</tt>. Subsequent calls to {@link #isCancelled}
* will always return <tt>true</tt> if this method returned <tt>true</tt>.
*
当方法返回时,isDone方法将返回true。如果cancel返回true,则#isCancelled方法返回true
* @param mayInterruptIfRunning <tt>true</tt> if the thread executing this
* task should be interrupted; otherwise, in-progress tasks are allowed
* to complete
* @return <tt>false</tt> if the task could not be cancelled,
* typically because it has already completed normally;
* <tt>true</tt> otherwise
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* Returns <tt>true</tt> if this task was cancelled before it completed
* normally.
*
在任务正常完成前,如果任务被取消成功,则返回true
* @return <tt>true</tt> if this task was cancelled before it completed
*/
boolean isCancelled();
/**
* Returns <tt>true</tt> if this task completed.
*
如果任务执行完,则返回true
* Completion may be due to normal termination, an exception, or
* cancellation -- in all of these cases, this method will return
* <tt>true</tt>.
*
由于任务正常结束,异常发生或任务被取消,方法返回true
* @return <tt>true</tt> if this task completed
*/
boolean isDone();
/**
* Waits if necessary for the computation to complete, and then
* retrieves its result.
如果需要,等待计算任务完成,取回任务计算结果
* @return the computed result
* @throws CancellationException if the computation was cancelled
* @throws ExecutionException if the computation threw an
* exception
* @throws InterruptedException if the current thread was interrupted
* while waiting
*/
V get() throws InterruptedException, ExecutionException;
/**
* Waits if necessary for at most the given time for the computation
* to complete, and then retrieves its result, if available.
*
如果需要,超时等待计算任务完成,如果结果可用,取回任务计算结果
* @param timeout the maximum time to wait
* @param unit the time unit of the timeout argument
* @return the computed result
* @throws CancellationException if the computation was cancelled
* @throws ExecutionException if the computation threw an
* exception
* @throws InterruptedException if the current thread was interrupted
* while waiting
* @throws TimeoutException if the wait timed out
*/
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
分享到:
相关推荐
PCI接口定义与PCI引脚定义 PCI(Peripheral Component Interconnect,外围组件互连)是一种局部总线标准,用于连接计算机的外围设备。PCI接口定义了计算机与外围设备之间的连接标准,PCI引脚定义了PCI接口中每个...
Future的类图结构中,Future接口定义了主要的5个接口方法,有RunnableFuture和SchedualFuture继承这个接口,以及CompleteFuture和ForkJoinTask继承这个接口。RunnableFuture这个接口同时继承Future接口和Runnable...
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
Callable 接口中定义了 `call()` 方法,与 Runnable 的 `run()` 方法不同。`call()` 方法可以抛出受检异常(Checked Exception)和运行时异常,这使得在执行任务时能够处理各种异常情况。更重要的是,Callable 任务...
Future接口定义了done、canceled等回调函数,当工作线程的任务完成时,它会(在工作线程中)通过回调告知我们,我们再采用其他手段通知其他线程。 6. Condition Condition其实是和Lock一起使用的,但如果把它视为...
本文将详细介绍如何使用`@Async`结合`Future`来处理异步任务,并探讨如何定义超时。 `@Async`是Spring提供的一个注解,用于标记一个方法为异步执行。当一个带有`@Async`的方法被调用时,Spring会创建一个新的线程来...
这两个执行器都实现了相同的接口,即`AbstractExecutor`类定义的方法。让我们分别看看它们的用法: 1. **ThreadPoolExecutor**:线程池执行器利用Python的多线程机制。由于GIL(全局解释器锁)的存在,Python的多...
2. **标准库的移植**:"future"模块提供了移植版的Python 3标准库,如`urllib`, `urllib.request`, `urllib.parse`, `xmlrpc.client`, 等等,使得在Python 2中也能使用这些更新的接口。 3. **类型定义**:为Python ...
1. **方法签名**:`Runnable`接口定义了`run()`方法,而`Callable`接口定义了`call()`方法。 2. **返回值**:`Callable`任务可以有返回值,而`Runnable`任务则没有。 3. **异常处理**:`call()`方法允许抛出异常,而...
在Java中,`java.util.concurrent.Future`接口就是这样的一个概念,它允许我们注册回调或者查询结果是否已经准备好。而在Kotlin的上下文中,"Future"可以被看作是一种异步操作的抽象,它代表了将来的值,可以用来...
在Java中,`java.util.concurrent.Future`接口定义了几个方法,如`get()`用于获取结果,`isDone()`检查任务是否完成,`cancel()`取消任务等。在使用Future模式时,我们需要创建一个实现了Callable接口的类,该类的...
在Python中,"Future" 模块提供了一个简单的接口来处理异步编程,这在处理I/O密集型任务或网络请求时尤其有用。通过使用 "Future" 对象,开发者可以定义一个异步任务,并在任务完成时获取结果,而无需阻塞主线程。这...
因此,FutureTask不仅实现了Future接口的所有方法,还具有自己的run方法。 三、Future与FutureTask的关系 Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异: 1. Future是接口,...
每一层都有明确的接口和功能定义,以确保软件组件之间的互操作性。 2.FACE规范还提出了一个面向系统的通用模型,这个模型包括平台独立模型(PIM)和平台特定模型(PSM),以及它们之间的映射关系。PIM定义了FACE...
Future库的核心组件是`concurrent.futures`模块,它定义了一个高级接口来使用线程池或进程池执行异步操作。它提供了`ThreadPoolExecutor`和`ProcessPoolExecutor`两个类,它们分别用于基于线程和进程的并发执行。...
- **定义**:`Future`是Netty中用来表示异步操作结果的一个接口。当启动一个异步操作(例如发起一个网络连接请求、写入数据等)时,该操作会立即返回一个`Future`对象。 - **功能**: - 通过`isDone()`方法检查...
6. **API更新**:可能对一些接口进行了改进或新增,以提供更好的用户体验和更强大的功能。 这个"future-0.15.0"压缩包很可能包括了如下内容: - `setup.py`:安装脚本,用于通过pip或其他方式安装这个库。 - `...
而在Android平台上,为了实现跨进程的数据交换,Android引入了一种特殊的接口定义语言,即Android AIDL(Android Interface Definition Language)。AIDL使得开发者能够定义可以在不同进程间调用的方法,从而实现了...
基于源代码接口定义自动推导,强大的返回结构推导。 支持Spring MVC、Spring Boot、Spring Boot Web Flux(controller书写方式)、Feign。 支持Callable、Future、CompletableFuture等异步接口返回的推导。 支持...