- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 是线程安全的吗?现在,我有一个场景如下:
ThreadPoolExecutor
(s)(我希望上面的场景已经很清楚了)。
此外,所有执行器在对象级别都是通用的。在 A 级,最多只有 4-5 个作业并行执行,并为下一个级别 (B) 的各种单独作业/事务做准备。B 级作业反过来为 C 级准备作业,C 级为 D 级准备作业。
Exec5 是一个持久器,它将所有数据保存到数据库中。
问题在于,作业在 C 级和 D 级的某个地方丢失,特别是当有许多并发线程尝试在后续执行程序任务列表中异步推送新作业时。没有一个 RejectionHandler
也收到任何被拒绝的处理程序。另外,如果每个 ThreadPoolExecutors 都减少为单个线程池执行器(仅 1 个线程),我不会遇到任何问题。这些作业本质上非常小,因此并行性确实为该 Activity 提供了显着的优势。
我希望我已经说清楚了。
请指教。问候,KT
最佳答案
您如何向 ExecutorService
提交工作?您使用的是submit(Callable)
还是execute(Runnable)
?在前一种情况下,调用代码有责任通过在返回的 Future
上调用 get()
来检测任何异常情况。因此,如果您的执行器只是将工作传递给下一个执行器并丢弃 Future
,则任何错误都不会被检测到。
一种解决方法是使用 execute(Runnable)
并重写 ThreadPoolExecutor
的 afterExecute(Runnable r, Throwable t)
方法来引发如果使用非空 Throwable
调用,则发出警报。
另一种解决方案是将执行器包装在 CompletionService
中,并使用专用线程删除已完成的 Future
并“提取”和异常。
顺便说一句,这个架构看起来相当复杂。 5级执行者真的有必要吗?为什么不从执行所有必需步骤的单个 ThreadPoolExecutor 开始呢?您的设计越简单,就越容易发现任何问题。
关于java - ScheduledThreadPoolExecutor 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372325/
ScheduledThreadPoolExecutor 扩展自 一文秒懂 Java 线程池之 ThreadPoolExecutor 讲解的 了ThreadPoolExecutor 类,并且添加了其它方
ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 是线程安全的吗?现在,我有一个场景如下: 5 ThreadPoolExecutor(s) exec1(
我有以下类(class) public class MaintanceTools { public static final ScheduledThreadPoolExecutor THREA
我需要更改 ScheduledThreadPoolExecutor 的运行任务的执行时间。 我有类似的东西 executor.schedule(new Runnable() {blablal},10,
我想要一些线程池,它每隔固定的时间运行一些任务(这个线程池一直在获取任务)。每个任务都会调用一些 API 来获取一些值,该值可以为 null。我希望仅当返回值为空时任务才再次运行(在固定时间后)。否则
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。请参阅SSCCE.o
我有一个具有固定延迟的任务,并且希望在 ScheduledThreadPoolExecutor 队列中只有一个任务。我的想法是使用 getQueue().isEmpty() 来检查队列中是否只有一个任
我如何将参数传递给 ScheduledThreadPoolExecutor? 我有以下代码。您会注意到,我声明了一个变量“num”,并将其作为参数传递给 exampleFunction()。 exam
假设我有这样的方法 public void scheduleCleanup(String parameter) { final SomeObject someObject = new Some
我知道由于各种原因我必须使用它而不是 java.util.Timer。所以,为了研究这个,我正在查看文档,我有几个问题: scheduleWithFixedDelay() 是如何工作的? 我的理解是:
例程 myProcessToRun() 需要执行 100 次,但每次执行之间需要大约一秒钟的延迟。 以下 FOR 循环与 ScheduledThreadPoolExecutor 对象结合使用。 for
ScheduledThreadPoolExecutor 中有两个属性具有以下 getter(以及随附的 setter) : boolean getContinueExistingPeriodicTas
这个问题只是为了对这些概念有一些想法,以了解业内人士将其用于什么目的。 如果您可以仅给出一些示例用法,我将不胜感激。我知道它们是如何工作的,并确实阅读了有关它们的google文档,但我似乎仍然很难选择
所有可用的 ScheduledThreadPoolExecutor 构造函数都需要一个 corePoolsize 参数。但我不确定我实际需要多少? 我计划在一个类中使用它,其中一个实例仅使用 1 个计
我正在尝试在 scala play 框架中实现预定作业。 以下是我的代码: def subCron = { val task = new Runnable { def run() = {
ScheduledThreadPoolExecutor 的文档说 -安排在完全相同执行时间的任务以先进先出 (FIFO) 的提交顺序启用。 这是否意味着应该同时完成的任务永远不会同时完成。相反,它们以
我有这个简单的代码片段: /** * @param args the command line arguments */ public static void main(String[] args
我写了下面的代码: import java.util.Calendar; import java.util.concurrent.ScheduledThreadPoolExecutor; import
如果我使用ThreadPoolExecutor,我有多种构造函数,我可以为池的工作队列传递/使用我自己的队列。 现在我看到 ScheduledThreadPoolExecutor 是 ThreadPo
我正在阅读 ScheduledThreadPoolExecutor JavaDoc并遇到了以下事情: Delayed tasks execute no sooner than they are ena
我是一名优秀的程序员,十分优秀!