Executor、ExecutorService、Future、FutureTask、Future、Callable、Lock、Condition
Future,Callable,FutureTask
Future 表示 一个任务的生命周期,并提供了相应的方法来判断是否已经完成或取消,以及获取任务的结果和取消任务等。
Callable是一种更好的抽象,它认为主入口点(call())返回一个值,并可能抛出一个异常。
Callable接口与Future接口1
2
3
4
5
6
7
8
9
10
11public interface Callable<V>{
V call() throws Exception;
}
public interface Future<V>{
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws Exception ;
V get(lont timeout,TimeUnit unit) throws Exception ;
}
还可以显示地为某个指定的Runnable或Callable实例化一个FutureTask。
(由于FutureTask实现了Runnable,因此可以将它提交给Executor来执行)。
Executor接口,子接口有ExecutorService和ScheduleExecutorService
Executor是任务执行框架,大多数的并发应用都是围绕任务执行来构造的。
1 | public interface Executor { |
ExecutorService中所有submit方法都返回一个Future,从而将一个Runnable或Callable提交给Executor,并得到一个Future用来获取任务的执行结果或者取消任务。
Executors,通过该类的静态方法,返回线程池的执行框架。
如:
- newFixedThreadPool(int nThreads) 固定大小的线程池
- newSingleThreadExecutor() 单线程池
- newCachedThreadPool() 可缓存的线程池
- newScheduledThreadPool(int nThreads) 创建一个定长,支持调度的线程池
Lock,Condition
Lock提供了一种可轮询的,定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的。(lock() unlock())
Condition是一种广义上的内置条件队列,定义了等待通知方法,可用于线程间的同步。