zoukankan      html  css  js  c++  java
  • JAVA线程池使用注意事项

     

     

    线程池中重要的配置

    • corePoolSize : 核心线程数量
    • workQueue : 等待队列
    • maximumPoolSize : 最大线程数量

    提交任务时,判断的顺序为 corePoolSize --> workQueue -->maximumPoolSize

    当线程数小于核心线程数时,创建核心线程

    当线程大于等于核心线程数,且任务队列未满时,将任务放入队列

    当线程数大于核心线程数,且任务队列已满时,检查最大线程数是否已满,若未满,创建非核心线程,若满,根据拒绝策略抛出异常拒绝任务。

     

    拒绝策略—RejectedExecutionHandler

    • AbortPolicy : 直接抛出异常,这是默认策略
    • CallerRunsPolicy : 用调用者所在线程来执行任务
    • DiscardOldestPolicy : 丢弃阻塞队列中最靠前的任务,并执行当前任务
    • DiscardPolicy : 直接丢弃任务

    遇到的坑!!!

    • 任务提交后长时间没有执行

       1.任务进入了队列,线程还在执行之前的任务。提交的任务还在排队等待执行中

    • 线程执行任务中无故消失

              1.  线程拒绝策略配置为CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy时 ,线程池满了不会抛出异常。建议将拒绝策略配置为AbortPolicy

              2.  一般情况下,代码只会去捕捉Exception,如果抛出Error(比如内存溢出)则会导致线程退出,而异常信息又没有拿到。最佳的解决办法是给线程池设置UncaughtExceptionHandler

    参考地址

    Java线程池使用的注意事项 https://www.jianshu.com/p/340f23001a65

     

    欢迎关注微信公众号:shoshana

  • 相关阅读:
    web学生选课平台
    YUM仓库的搭建
    定制RPM包
    会话保持
    Nginx负载均衡器+keepalived
    LAMP搭建配置
    KVM安装搭建
    安装PHP以及搭建博客(四)伪静态
    安装PHP以及搭建博客(三)服务迁移分离
    安装PHP以及搭建博客(二)
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/14030345.html
Copyright © 2011-2022 走看看