首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不断向ExecutorService提交可运行的任务,直到工作完成,获取java.util.concurrent.RejectedExecutionException

问题描述: 不断向ExecutorService提交可运行的任务,直到工作完成,获取java.util.concurrent.RejectedExecutionException。

回答: 在Java中,ExecutorService是一个用于管理线程池的接口,它提供了一种方便的方式来执行并发任务。当我们向ExecutorService提交任务时,它会将任务分配给线程池中的线程来执行。然而,在某些情况下,当线程池已经饱和或者无法接受更多任务时,ExecutorService可能会抛出java.util.concurrent.RejectedExecutionException异常。

java.util.concurrent.RejectedExecutionException是一个运行时异常,表示ExecutorService无法接受或执行提交的任务。这通常发生在以下情况下:

  1. 线程池已经达到了最大线程数限制,并且所有线程都正在执行任务。
  2. ExecutorService已经被关闭,不再接受新的任务。

为了解决这个问题,我们可以采取以下几种方法:

  1. 捕获异常并处理:在向ExecutorService提交任务时,可以使用try-catch语句来捕获RejectedExecutionException异常,并根据需要进行处理。例如,可以选择重新提交任务、记录日志或者通知用户等。
  2. 使用有界队列:可以在创建ExecutorService时,使用有界队列来限制任务的提交速度。当队列已满时,ExecutorService将拒绝接受新的任务,并抛出RejectedExecutionException异常。这样可以避免线程池过载,但可能会导致一些任务被丢弃。
  3. 调整线程池参数:可以通过调整线程池的参数来增加线程池的容量,以便能够接受更多的任务。可以调整的参数包括核心线程数、最大线程数、线程空闲时间等。
  4. 使用其他ExecutorService实现:除了Java标准库提供的ExecutorService实现,还可以考虑使用其他第三方库或框架提供的ExecutorService实现。这些实现可能具有更灵活的配置选项,以及更好的性能和扩展性。

总结: 当不断向ExecutorService提交可运行的任务,直到工作完成时,如果出现java.util.concurrent.RejectedExecutionException异常,说明ExecutorService无法接受或执行提交的任务。为了解决这个问题,可以捕获异常并处理、使用有界队列、调整线程池参数或者使用其他ExecutorService实现。具体的解决方法应根据实际情况和需求来选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(七十六)线程池管理

    在前面的《Android开发笔记(四十八)Thread类实现多线程》,我们介绍了线程类Thread的使用,可是缺乏线程的统一管理,这会产生如下问题: 1、无法控制线程的并发数,一旦同时启动多个线程,可能导致程序挂死; 2、线程之间无法复用,每个线程都经历创建、启动、停止的生命周期,资源开销不小; 3、线程不能被外部有效地杀死,虽然Thread类提供了stop方法,但该方法已经过时,并不推荐使用; 基于以上问题,Java提供了线程池机制,用于对程序内部的线程作统一管理,统一分配、统一调度。Java把线程池分为两大类:普通线程池、定时器线程池,最新的java1.8新加了一类分支/聚合线程池(即ForkJoinPool),但Android尚无ForkJoinPool的定义,所以本文的讨论仅限于前两类。 再具体一点,Android中用到的线程池一共五种,它们都在Executors类中创建,分别是: 1、newCachedThreadPool : 创建一个无个数限制的线程池。 2、newFixedThreadPool : 创建线程数量固定的线程池。 3、newSingleThreadExecutor : 创建只有单个线程的线程池。 4、newScheduledThreadPool : 创建线程数量固定的定时器线程池。 5、newSingleThreadScheduledExecutor : 创建只有单个线程的定时器线程池。 上述五个方法返回的线程池对象都是ExecutorService,它是线程池服务的接口。ExecutorService接口有两个派生类,分别是普通线程池ThreadPoolExecutor,以及定时器线程池ScheduledExecutorService。

    03
    领券