首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java.util.concurrent并发包诸类统观

2014-01-08 
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的实现类

              其它:

              • ThreadLocalRandom.class,随机数生成器,它和Random类差不多,但是它的性能要高得多,因为它的种子内部生成后,就不再修改,而且随机对象不共享,就会减少很多消耗和争用,由于种子内部生成,因此生成随机数的方法略有不同:ThreadLocalRandom.current().nextX(…)

                文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

热点排行