Java 在执行某些任务后,是否为ThreadPoolExecutor设置自定义RejectedExecutionHandler?
我在我的一个Android组件中使用Java ThreadPoolExecutor。我的问题是: 在对TPE执行某些任务后,使用setRejectedExecutionHandler()设置RejectedExecutionHandler是否是一种好的做法 我的意思是这样做有副作用吗。这是一种好的做法吗 已编辑Java 在执行某些任务后,是否为ThreadPoolExecutor设置自定义RejectedExecutionHandler?,java,threadpoolexecutor,Java,Threadpoolexecutor,我在我的一个Android组件中使用Java ThreadPoolExecutor。我的问题是: 在对TPE执行某些任务后,使用setRejectedExecutionHandler()设置RejectedExecutionHandler是否是一种好的做法 我的意思是这样做有副作用吗。这是一种好的做法吗 已编辑 我需要在Android中创建一个ThreadPoolManagementLibrary项目,该项目可供其他项目使用。现在,我需要在我的组件中公开TPE的公共方法。如果我让用户设置Reje
我需要在Android中创建一个ThreadPoolManagementLibrary项目,该项目可供其他项目使用。现在,我需要在我的组件中公开TPE的公共方法。如果我让用户设置RejectedExecutionHandler,那会有问题吗?我不这么认为。让我们试着理解RejectedExecutionHandler是做什么的 向ThreadPoolExecutor提交任务时,会发生以下事件序列:
- 如果有任何工作线程是空闲的,并且可以运行此任务李>
- 否则,它将尝试将此任务移动到workerqueue,如果任务空闲,工作线程将从该队列中提取该任务李>
- 如果workerQueue也已满,则它将在可能的情况下尝试创建新线程(没有工作线程小于maxPoolSize)
- 如果上述所有操作都失败,则任务将发送到处理程序,默认处理程序将抛出RejectedExecutionException
所以基本上,如果您允许用户设置他们自己的处理程序,那么您就给了他们以自己的方式处理被拒绝任务的自由。他们在实施时应该小心。我不这么认为。让我们试着理解RejectedExecutionHandler是做什么的 向ThreadPoolExecutor提交任务时,会发生以下事件序列:
- 如果有任何工作线程是空闲的,并且可以运行此任务李>
- 否则,它将尝试将此任务移动到workerqueue,如果任务空闲,工作线程将从该队列中提取该任务李>
- 如果workerQueue也已满,则它将在可能的情况下尝试创建新线程(没有工作线程小于maxPoolSize)
- 如果上述所有操作都失败,则任务将发送到处理程序,默认处理程序将抛出RejectedExecutionException
当然,如果您使用的是框架或应用程序服务器,问题可能会有所不同,因为此服务器或框架可能会为您处理未捕获的异常。我也同意@user2120553。
@Braj Kishore提到的所有要点都是正确的,但我想指出的是,如果我们声明我们的自定义
拒绝执行处理程序
,那么我们肯定会有机会重试执行。我也同意@user2120553。
@Braj Kishore提到的所有要点都是正确的,但我想说的是,如果我们声明我们的自定义
拒绝执行处理程序
,那么我们肯定会有机会重试执行。为什么要这样做?“我认为拒绝政策应该是明确和稳定的。”亚西尔亚斯编辑了这个问题。你为什么要这样做?“我认为拒绝政策应该是明确和稳定的。”亚西尔亚斯编辑了这个问题。