FutureTask

作者: 小超人爱小土豆 | 来源:发表于2018-08-10 09:37 被阅读43次

一、学习FutureTask的时候,要知道,为什么引入这个概念。

        我们在创建线程的时候,一般都是继承thread类或者实现runnable接口这两种。但是他们都有一个共同的问题就是没法返回线程执行之后的结果(当然你也可以通过共享变量或者使用线程通信的方式来达到效果)。java5之后提供了callable和Future接口,通过他们就可以在任务执行结束后返回执行结果。

二、本文主要就是浅析一下这个三个类Callable、Future、FutureTask。

   (一)Callable:

   Callable 的使用要配合ExecuteServer。

    ExecuteServer的submit方法是一个多态的方法。

    (1)Futuresubmit(Callabletask);

    (2)Future submit(Runnable task, T result);

    (3)Future submit(Runnable task);

    Callable接口:

    public interface Callable<V> {

    V call() throws Exception;//这是一个泛型接口,call()函数返回的类型就是传递进来的V类型。

    }

    (二)Future:

    就是对具体的callable与runnable任务的执行结果进行取消,查询是否完成,通过使用get方法获取线程最终的执行结果,get方法会阻塞直到任务返回结果。

    重点:(敲黑板)

    Future重心是:获取线程执行结果、能够中断任务、判断任务是否执行结束

    Future位于concurrent包下,他是一个接口

    具体定义了如下五个方法:

    public interface Future {

    ① boolean cancel(boolean mayInterruptIfRunning);

   ②  boolean isCancelled();

    ③ boolean isDone();

    ④ V get() throws InterruptedException, ExecutionException;

   ⑤  V get(long timeout, TimeUnit unit)

        throws InterruptedException, ExecutionException, TimeoutException;

}

    cancel:用来取消任务。

    如果取消任务成功----------------ture、如果取消任务失败-------------false。

    参数mayInterruptIfRunning:标示是否取消正在执行但没有执行完毕的任务。如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true。

    isCancelled

    方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。

    isDone

    方法表示任务是否已经完成,若任务完成,则返回true;

    get()

    方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;

    get(long timeout, TimeUnit unit)

    用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。

    (三)FutureTask:

    futuretask是实现了runnablefuture接口,而runnablefuture接口是继承了runnable和future两个接口。而futureTask又实现了runnable接口,所以futuretask即可以被线程执行,又可以作为future得到callable的返回值。

    FutureTask提供了2个构造器:public     FutureTask(Callable callable) {}

    public FutureTask(Runnable runnable, V result) {}

相关文章

网友评论

    本文标题:FutureTask

    本文链接:https://www.haomeiwen.com/subject/bjoqbftx.html