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

来源:互联网 发布:淘宝删中差评的方法 编辑:程序博客网 时间:2024/05/17 01:19
在创建线程的方法中,一种是实现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。


原创粉丝点击