`
Donald_Draper
  • 浏览: 971943 次
社区版块
存档分类
最新评论

Future接口定义

    博客分类:
  • JUC
阅读更多
/*
 * 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;
}
0
0
分享到:
评论

相关推荐

    pci引脚定义pci接口定义.doc

    PCI接口定义与PCI引脚定义 PCI(Peripheral Component Interconnect,外围组件互连)是一种局部总线标准,用于连接计算机的外围设备。PCI接口定义了计算机与外围设备之间的连接标准,PCI引脚定义了PCI接口中每个...

    了解JAVA Future类

    Future的类图结构中,Future接口定义了主要的5个接口方法,有RunnableFuture和SchedualFuture继承这个接口,以及CompleteFuture和ForkJoinTask继承这个接口。RunnableFuture这个接口同时继承Future接口和Runnable...

    线程超时死掉

    解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...

    Callable和Future.doc

    Callable 接口中定义了 `call()` 方法,与 Runnable 的 `run()` 方法不同。`call()` 方法可以抛出受检异常(Checked Exception)和运行时异常,这使得在执行任务时能够处理各种异常情况。更重要的是,Callable 任务...

    浅谈Android中多线程切换的几种方法

    Future接口定义了done、canceled等回调函数,当工作线程的任务完成时,它会(在工作线程中)通过回调告知我们,我们再采用其他手段通知其他线程。 6. Condition Condition其实是和Lock一起使用的,但如果把它视为...

    Spring Boot利用@Async异步调用:使用Future及定义超时详解

    本文将详细介绍如何使用`@Async`结合`Future`来处理异步任务,并探讨如何定义超时。 `@Async`是Spring提供的一个注解,用于标记一个方法为异步执行。当一个带有`@Async`的方法被调用时,Spring会创建一个新的线程来...

    future2.1.6

    这两个执行器都实现了相同的接口,即`AbstractExecutor`类定义的方法。让我们分别看看它们的用法: 1. **ThreadPoolExecutor**:线程池执行器利用Python的多线程机制。由于GIL(全局解释器锁)的存在,Python的多...

    java自定义任务类定时执行任务示例 callable和future接口使用方法

    1. **方法签名**:`Runnable`接口定义了`run()`方法,而`Callable`接口定义了`call()`方法。 2. **返回值**:`Callable`任务可以有返回值,而`Runnable`任务则没有。 3. **异常处理**:`call()`方法允许抛出异常,而...

    Android-Future基于Kotlin协同程序的简单的monadic未来实现

    在Java中,`java.util.concurrent.Future`接口就是这样的一个概念,它允许我们注册回调或者查询结果是否已经准备好。而在Kotlin的上下文中,"Future"可以被看作是一种异步操作的抽象,它代表了将来的值,可以用来...

    Android AIDL接口定义语言

    而在Android平台上,为了实现跨进程的数据交换,Android引入了一种特殊的接口定义语言,即Android AIDL(Android Interface Definition Language)。AIDL使得开发者能够定义可以在不同进程间调用的方法,从而实现了...

    31 凭票取餐—Future模式详解.pdf

    在Java中,`java.util.concurrent.Future`接口定义了几个方法,如`get()`用于获取结果,`isDone()`检查任务是否完成,`cancel()`取消任务等。在使用Future模式时,我们需要创建一个实现了Callable接口的类,该类的...

    比较java中Future与FutureTask之间的关系

    因此,FutureTask不仅实现了Future接口的所有方法,还具有自己的run方法。 三、Future与FutureTask的关系 Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异: 1. Future是接口,...

    future-0.17.1.tar.gz

    在Python中,"Future" 模块提供了一个简单的接口来处理异步编程,这在处理I/O密集型任务或网络请求时尤其有用。通过使用 "Future" 对象,开发者可以定义一个异步任务,并在任务完成时获取结果,而无需阻塞主线程。这...

    future-0.18.0.tar.gz

    Future库的核心组件是`concurrent.futures`模块,它定义了一个高级接口来使用线程池或进程池执行异步操作。它提供了`ThreadPoolExecutor`和`ProcessPoolExecutor`两个类,它们分别用于基于线程和进程的并发执行。...

    shindig功能接口新增以及调用

    4. 定义操作方法:新增的方法通常应返回`Future`类型,用于异步处理请求,并可能抛出`ProtocolException`。通过`@Operation`注解来指定HTTP请求类型(GET、POST、PUT、DELETE)以及可能的请求体参数。 5. 注册处理...

    Netty Future-Listener 机制.pdf

    - **定义**:`Future`是Netty中用来表示异步操作结果的一个接口。当启动一个异步操作(例如发起一个网络连接请求、写入数据等)时,该操作会立即返回一个`Future`对象。 - **功能**: - 通过`isDone()`方法检查...

    face3(Future Airborne Capability Environment)规范

    每一层都有明确的接口和功能定义,以确保软件组件之间的互操作性。 2.FACE规范还提出了一个面向系统的通用模型,这个模型包括平台独立模型(PIM)和平台特定模型(PSM),以及它们之间的映射关系。PIM定义了FACE...

    future-0.15.0.tar.gz

    6. **API更新**:可能对一些接口进行了改进或新增,以提供更好的用户体验和更强大的功能。 这个"future-0.15.0"压缩包很可能包括了如下内容: - `setup.py`:安装脚本,用于通过pip或其他方式安装这个库。 - `...

    Java利用future及时获取多线程运行结果

    通过使用Future接口,可以实现异步计算和非阻塞的任务调用。但是,直接使用Future的结果需要通过isDone()方法来判断是否有结果,或者使用get()函数来阻塞式获取执行结果,这样就会失去实时跟踪其他线程的结果状态。 ...

    smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,.rar

    基于源代码接口定义自动推导,强大的返回结构推导。 支持Spring MVC、Spring Boot、Spring Boot Web Flux(controller书写方式)、Feign。 支持Callable、Future、CompletableFuture等异步接口返回的推导。 支持...

Global site tag (gtag.js) - Google Analytics