java线程池

1、说到线程池,想通肯定会想到数据库连接池,其技术思想是相通的,那有什么优点呢?

降低资源消耗:避免重复创建、销毁线程。

高响应速度:直接从线程池获取,省去创建时间。

提高线程的可管理性:用线程池进行统一的分配,调优和监控。

2、说一说有几个参数?分别代表什么含义?

一共7个参数,如下:

publicThreadPoolExecutor(int corePoolSize,      ----核心线程数

                              int maximumPoolSize,            ----最大线程数

                              long keepAliveTime,               -----非核心线程,空闲多久被回收(缩容)

                              TimeUnit unit,                         ------时间单位,与上一个参数配合

                              BlockingQueue workQueue,    -----阻塞队列大小

                              ThreadFactory threadFactory, -------默认线程工厂

                              RejectedExecutionHandler handler)-----饱和拒绝策略

3、谈一谈线程池工作原理?

    初始化线程池,此时线程数量是0,当来任务时会先判断,当前线程数量是否小于核心线程数,如果小于则直接创建线程并执行任务;如果此时线程数达到核心线程数并且阻塞队列不满,则此任务进入阻塞队列;如果处理任务慢,来的任务快,过段时间阻塞队列也会满;阻塞队列满了以后就会创建新的线程来分担任务,但是创建的总线程数不会超过最大线程数。当线程数等于最大线程数并且阻塞队列已满,此时就会启动饱和拒绝策略。

4、谈一谈饱和拒绝策略有哪些?

    AbortPolicy(默认):直接抛出RejectedExecutionException,异常阻止系统正常运行。

    CallerRunsPolicy:该策略既不会抛弃任务,也不会抛出异常,而是将某些任务退回给调用者;一句话从哪来,就给我回哪去。

    DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务。

    DiscardPolicy:该策略默默丢弃无法处理的任务,不予任何处理也不抛出任何异常。如果允许任务丢失,这是最好的解决方法。

过程图如下:

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java线程池 [toc] 什么是线程池 线程池就是有N个子线程共同在运行的线程组合。 举个容易理解的例子:有个线...
    石家志远阅读 1,484评论 0赞 6
  • 在我们的开发中“池”的概念并不罕见,有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭...
    Java架构阅读 4,264评论 4赞 87
  • 面对金钱,他认输了 1 金钱面前,友情妥协了 同学小马,和我一起合租一间房。 起初,由于都是学医,又在同一家医院实...
    微笑229_3e1a阅读 692评论 0赞 1
  • 未见一场 琐碎的花与梦 已潜在的 画面 恍然一宿 也已撑开的花瓣色泽 耀过遥遥的边际 凛冽成海 呦 花 你的梦消失...
    纪颜阅读 298评论 0赞 2
  • 看到李咏去世的消息还是很意外的,作为一位知名的央视主持人,他给人留下了很深的时代印象。 珍惜拥有,珍惜当下。
    玥玥粑粑阅读 169评论 0赞 0

友情链接更多精彩内容