使用线程池注意事项

  • 1.大厂开发规范,线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
  • 1)FixedThreadPool 和 SingleThreadPool: 允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM
  • 2)CachedThreadPool 和 ScheduledThreadPool: 允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM
  • 2.使用线程池,还要注意异常处理的问题,例如通过 ThreadPoolExecutor 对象的 execute() 方法提交任务时,如果任务在执行的过程中出现运行时异常,会导致执行任务的线程终止;不过,最致命的是任务虽然异常了,但是你却获取不到任何通知,这会让你误以为任务都执行得很正常。虽然线程池提供了很多用于异常处理的方法,但是最稳妥和简单的方案还是捕获所有异常并按需处理
以下是线程池使用注意事项: 1. 核心线程数量(corePoolSize):线程池中始终保持的线程数量。如果线程池中的线程数量小于核心线程数量,新任务将创建新线程来处理。如果线程池中的线程数量大于核心线程数量,新任务将被放入等待队列中。 2. 等待队列(workQueue):用于存放等待执行的任务的队列。当线程池中的线程数量达到核心线程数量时,新任务将被放入等待队列中。等待队列可以是有界队列或无界队列。 3. 最大线程数量(maximumPoolSize):线程池中允许的最大线程数量。当等待队列已满且线程池中的线程数量小于最大线程数量时,新任务将创建新线程来处理。如果线程池中的线程数量已达到最大线程数量,新任务将根据拒绝策略进行处理。 4. 拒绝策略(RejectedExecutionHandler):当线程池中的线程数量已达到最大线程数量且等待队列已满时,新任务将根据拒绝策略进行处理。常见的拒绝策略有:抛出异常、丢弃任务、丢弃等待队列中最旧的任务、将任务分配给调用线程来执行。 5. 线程池的关闭:在不再需要线程池时,应该调用线程池的shutdown()方法来关闭线程池。关闭线程池后,将不再接受新任务,但会等待已提交的任务执行完毕。 6. 线程池的监控和调优:可以通过监控线程池的活动线程数量、等待队列长度、已完成任务数量等指标来进行线程池的调优,以提高性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值