java.util.concurrent并发包诸类统观
java.util.concurrent并发包诸类概览给出一个Phaser使用的最简单的例子:ExecutorService:Future.class,异
java.util.concurrent并发包诸类概览
给出一个Phaser使用的最简单的例子:
ExecutorService:
- Future.class,异步计算的结果对象,get方法会阻塞线程直至真正的结果返回
- Callable.class,用于异步执行的可执行对象,call方法有返回值,它和Runnable接口很像,都提供了在其他线程中执行的方法,二者的区别在于:
- Runnable没有返回值,Callable有
- Callable的call方法声明了异常抛出,而Runnable没有
- RunnableFuture.class,实现自Runnable和Future的子接口,成功执行run方法可以完成它自身这个Future并允许访问其结果,它把任务执行和结果对象放到一起了
- FutureTask.class,RunnableFuture的实现类,可取消的异步计算任务,仅在计算完成时才能获取结果,一旦计算完成,就不能再重新开始或取消计算;它的取消任务方法cancel(boolean mayInterruptIfRunning)接收一个boolean参数表示在取消的过程中是否需要设置中断
- Executor.class,执行提交任务的对象,只有一个execute方法
- Executors.class,辅助类和工厂类,帮助生成下面这些ExecutorService
- ExecutorService.class,Executor的子接口,管理执行异步任务的执行器,AbstractExecutorService提供了默认实现
- AbstractExecutorService.class,ExecutorService的实现类,提供执行方法的默认实现,包括:
- ① submit的几个重载方法,返回Future对象,接收Runnable或者Callable参数
- ② invokeXXX方法,这类方法返回的时候,任务都已结束,即要么全部的入参task都执行完了,要么cancel了
- ThreadPoolExecutor.class,线程池,AbstractExecutorService的子类,除了从AbstractExecutorService继承下来的①、②两类提交任务执行的方法以外,还有:
- ③ 实现自Executor接口的execute方法,接收一个Runnable参数,没有返回值
- RejectedExecutionHandler.class,当任务无法被执行的时候,定义处理逻辑的地方,前面已经提到过了
- ThreadFactory.class,线程工厂,用于创建线程ScheduledExecutor:
- Delayed.class,延迟执行的接口,只有long getDelay(TimeUnit unit)这样一个接口方法
- ScheduledFuture.class,Delayed和Future的共同子接口
- RunnableScheduledFuture.class,ScheduledFuture和RunnableFuture的共同子接口,增加了一个方法boolean isPeriodic(),返回它是否是一个周期性任务,一个周期性任务的特点在于它可以反复执行
- ScheduledExecutorService.class,ExecutorService的子接口,它允许任务延迟执行,相应地,它返回ScheduledFuture
- ScheduledThreadPoolExecutor.class,可以延迟执行任务的线程池
CompletionService:
- CompletionService.class,它是对ExecutorService的改进,因为ExecutorService只是负责处理任务并把每个任务的结果对象(Future)给你,却并没有说要帮你“管理”这些结果对象,这就意味着你得自己建立一个对象容器存放这些结果对象,很麻烦;CompletionService像是集成了一个Queue的功能,你可以调用Queue一样的方法——poll来获取结果对象,还有一个方法是take,它和poll差不多,区别在于take方法在没有结果对象的时候会返回空,而poll方法会block住线程直到有结果对象返回
- ExecutorCompletionService.class,是CompletionService的实现类
其它: