码迷,mamicode.com
首页 > 编程语言 > 详细

《java并发编程实践》---第8章 应用线程池

时间:2020-07-10 11:40:50      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:闲置   大于   card   拒绝策略   ror   run   time   mina   read   

1、定制线程池的大小

    1.1、线程池的合理大小  取决于  未来提交的任务类型  和  所部署的系统特征;

2、配置ThreadPoolExecutor

    2.1、ThreadPoolExecutor 提供了 一些基本的Executor的实现:

          (由 工具类Executors 提供的newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewSingleThreadScheduledExecutor 返回)

    2.2、如果 Executors提供的不能满足需求,可以通过ThreadPoolExecutor定制:

        核心线程池大小

          即使没有任务执行,池的大小也等于核心池的大小,直到工作队列充满前,都不会增加新的线程;

        最大线程数

          池内同时活动的线程的上限;

        线程存活时间

          如果一个线程闲置的时间超过了存活时间,并且 池大小  大于  核心线程大小 ,线程池会终止该线程;

        工作队列

          ThreadPoolExecutor提供了BolckingQueue 持有等待执行的任务;

          任务队列有3种:无限队列、有限队列、同步移交 

        拒绝策略

          当任务队列满后,新任务怎么处理?

            jdk提供了4种饱和策略:

                AbortPolicy:

                  默认策略,抛出RejectedExecutionException异常;

                CallerRunsPolicy:

                  既不会抛出异常、也不会丢弃任务,而是 将任务推回,由调用者执行;

                DiscardPolicy:

                  丢弃新任务;

                DiscardOldestPolicy:  

                  丢弃最老的任务

3、扩展ThreadPoolExecutor

    3.1、ThreadPoolExecutor提供了几个钩子函数:

        beforeExecute()

          如果beforeExecute()抛出一个RuntimeException,           任务不会执行,afterExecute()不会执行;

        afterExecute()

          任务  正常运行、 抛出异常,                     afterExecute()都会执行;

          任务  抛出Error,                        afterExecute()不会执行;

        terminated()

          线程池完成关闭后调用;

    3.2、应用:

        添加日志、时序、监视器、统计信息等;

        

        

《java并发编程实践》---第8章 应用线程池

标签:闲置   大于   card   拒绝策略   ror   run   time   mina   read   

原文地址:https://www.cnblogs.com/anpeiyong/p/13278221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!