Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RejectedExecutionHandler-CallerRunPolicy与AbortPolicy_Java_Multithreading_Java.util.concurrent_Threadpoolexecutor - Fatal编程技术网

Java RejectedExecutionHandler-CallerRunPolicy与AbortPolicy

Java RejectedExecutionHandler-CallerRunPolicy与AbortPolicy,java,multithreading,java.util.concurrent,threadpoolexecutor,Java,Multithreading,Java.util.concurrent,Threadpoolexecutor,设置线程池配置时,如何选择正确的RejectedExecutionHandler 我有一个发布事件的遗留应用程序(这些事件可以在本地使用,也可以由远程进程使用)。目前,策略是中止,这会导致大量异常和遗漏事件。我们将同步队列传递给线程池执行器 我正在考虑将RejectedExecutionHandler更改为caller runs策略。这可能意味着当达到线程限制和队列容量时,调用方将花费时间运行该任务。我看这没什么问题 到目前为止你有什么经验?另外,是否使用无界队列意味着没有用于RejectedE

设置线程池配置时,如何选择正确的
RejectedExecutionHandler

我有一个发布事件的遗留应用程序(这些事件可以在本地使用,也可以由远程进程使用)。目前,策略是中止,这会导致大量异常和遗漏事件。我们将同步队列传递给线程池执行器

我正在考虑将
RejectedExecutionHandler
更改为caller runs策略。这可能意味着当达到线程限制和队列容量时,调用方将花费时间运行该任务。我看这没什么问题


到目前为止你有什么经验?另外,是否使用无界队列意味着没有用于
RejectedExecutionHandler
的实用程序

我想您已经熟悉了

在中,调用execute自身的线程运行任务。这提供了一种简单的反馈控制机制,可以降低提交新任务的速度

它将影响应用程序的总体性能。如果应用程序能够承受此延迟(非实时和批处理、非交互式和脱机),则可以使用此策略。如果你不能承担延迟和放弃该任务的罚款,你可以选择

使用无界队列是否意味着RejectedExecutionHandler没有实用程序


对。无界队列意味着
拒绝执行处理程序
没有实用程序。当您使用无界队列时,请确保您的应用程序吞吐量在内存和CPU利用率方面处于控制之下。如果您提交的任务持续时间较短,且任务中的数据内存占用较少,则可以使用无界队列。

感谢您的回答,但是,
如果您无法承受延迟,可以放弃该任务,或者
不是实时和批处理,非交互式和脱机
不相关,大多数情况下您都不想要。我在寻找您选择放弃策略的用例,以及如果任务被拒绝,您希望任务提交者做什么。如果必须处理被拒绝的任务,那么CallerRunPolicy策略是以牺牲系统吞吐量为代价的唯一解决方案。其他解决方案会保留这些事件,并稍后在不同的ThreadPoolExecutor中处理它们