码上敲享录 > java高并发常见问题 > 线程池出现异常:java.util.concurrent.RejectedExecutionException

线程池出现异常:java.util.concurrent.RejectedExecutionException

上一章章节目录下一章 2021-01-25已有1647人阅读 评论(0)

线程池出现异常:java.util.concurrent.RejectedExecutionException


解决方法:

ThreadPoolExecutor executor = new ThreadPoolExecutor(200, 500, 30*1000, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<Runnable>(100));这是我线程池的配置,在提交任务高并发的时候,线程池会创建200个线程来执行任务,把未来得及处理的任务放到队列中,我这设置队列的大小是100,当队列存放的元素超过100后线程池就会最多创建500个线程执行任务,当线程池中的500个线程还是无法处理完任务时,再往线程池中提交任务就会报拒绝异常。

控制台错误日志如下,可见线程池中有500个线程,正在工作的线程数也是500,而且队列中的任务也是100,由此可见线程池的线程和队列已经消耗殆尽,没有任何地方可以接纳提交的任务导致发生拒绝异常:

java.util.concurrent.RejectedExecutionException: Task com.thinkcc.survet.design.controller.SuperAdminController$1@2a0f7c53 rejected from java.util.concurrent.ThreadPoolExecutor@719741d4[Running, pool size = 500, active threads = 500, queued tasks = 100, completed tasks = 1]


1.可以加大队列容量或者最大线程数,这个要看你的服务器内存来定。

2.可以创建线程池时指定拒绝策略。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交