您的位置:首页 > 编程语言 > Java开发

关于java的future和Executor接口的理解

2017-05-24 16:51 190 查看
在创建线程的方法中,一种是实现Runnable接口的方式,但是这种方式是没有办法获取返回值和捕获异常的,所以这里来说说可以让线程返回执行结果的Future,Callable,Executor接口。

首先说下Callable接口,这个接口只有一个方法如下:

public V call();

和Runnable不同的是,Thread类不会接受一个Callable接口的实现来实现一个线程,而是需要通过Executor接口的实现类来实现。通常是使用Executors这个类。在Executors这个类中,使用static方法,可以获取不同类型的Executor接口的实现。下面可以简单的梳理下关于Executor接口的逻辑关系。
Executor接口中只有一个方法:public void execute(Runnable command),理解来的意思就是执行这个command任务。至于是在一个新的线程还是线程池还是其他的方式,那就要看Executor接口的具体实现了。ExecutorService接口扩充了Executor,新增了许多新的方法,ScheduledExecutorService接口再次扩充了ExecutorService接口,新增了线程调度的相关方法。一些类实现了这些接口,并且可以通过前面所说的Executors这个类,通过static方法获取这些接口的实现类,比如ThreadPoolExecutorScheculedThreadPoolExecutor。

下面说下Future接口,这个接口定义的方法如下,它有一个简单的实现类FutureTask类,可以通过这个类来具体的看下这个接口的设计意图。

boolean cancel(boolean mayInterruptIfRunning)          

V get()           

V get(long timeout, TimeUnit unit)           

boolean isCancelled()           

boolean isDone()

从方法中可以看出,我们可一个通过get方法获取线程的计算结果,也可以通过cancel方法来中止这个线程,api文档中指出,如果调用get方法这个线程还没有完成,那么block线程。而且如果只是想用Future的取消线程的方法,那么可以直接返回null。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐