第9章Java中的线程池

  Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或者并发执行的程序都可以使用线程池。在开发过程中,合理使用线程池能够带来3个好处。

    第一:降低资源消耗

    第二:提高响应速度

    第三:提高线程的可管理性

  9.1 线程池的实现原理

    线程池的主要处理流程,处理流程图如图9-1所示

    

 

    1)线程池判断核心线程池的线程是否都在执行任务,不是则则创建线程执行任务。如果都在执行任务,则进入下一个流程

    2)判断工作队列满了吗。若没有则加入到队列中,否则进入下个流程

    3)线程池是否处于工作状态,满了交给饱和策略来执行这个任务。

      

 

     

 

  源码分析:

    

 

  

 

 

 

  9.2线程池的使用

    9.2.1线程池的创建      

      new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,milliseconds,runnableTaskQueue, handler); 
    9.2.2向线程池提交任务
      可以使用两个方法向线程池提交任务,分别未execute()和submit()方法

      execute()方法用于提交不需要返回值的任务,所以无法判断是否被线程池执行成功。

      submit()方法用于提交需要返回值的任务。线程池返回一个future类型的对象,通过future对象可以判断任务是否执行成功,并且可以通过future的get()方法获取返回值,会一直阻塞直到任务完成,而使用get(long timeout,TimeUnit unit)方法则会一直阻塞线程到达一定时间立即返回

   9.2.3线程池的关闭

      shutdown   shutdownNow

   9.2.4 合理配置线程池

 

posted @ 2019-10-28 17:34  helloworldmybokeyuan  阅读(147)  评论(0编辑  收藏  举报