gpt4 book ai didi

java - Runnable实例中的ExecutorService awaitTermination关闭信号

转载 作者:行者123 更新时间:2023-12-03 13:10:32 25 4
gpt4 key购买 nike

我对ExecutorService和关机过程有一些疑问。
我的用例:
我使用ExecutorService生成一定数量的线程,其运行方法如下所示:

while (true) {
try {
this.currentThreadRunning = true;
processMessage();
}
catch (Throwable e) {
// Keeping the thread alive despite exceptions.
}
}

这些线程无限运行,轮询消息。

我想做什么?
我正在轮询SQS队列以获取消息并对其进行处理。

显然,就我而言, ExecutorService's关闭方法不起作用。调用 shutdownNow()时,我的所有线程都会正常关闭。我恨它!

有没有一种方法可以在我的 awaitTermination实例中(在finally块中)调用 Runnable并进行验证,以确认是否已启动关闭并为当前线程触发了该操作?

更新:我已经重构了我的代码以执行轮询,然后生成线程来对其进行处理。因此,Runnable实例的run方法不必是一个无限循环。 awaiTermination将导致线程的确定关闭。可以肯定的是,我在 shutdownNow之后触发了 awaitTermination

最佳答案

我认为您在做什么在概念上是错误的。
awaitTermination的意思是等待所有线程自然完成,然后停止执行程序。提交Runnable时,不应了解其执行的上下文,因此,将可运行对象耦合到执行器并不是恕我直言的好主意。

也许您应该研究Future类,然后将Runnable实现移到那里。然后,您将被迫实现可能会发现有用的cancel(boolean)方法。

您的用例到底是什么?也许,如果您对此进行解释,社区可以指出一个更合适的实现方案。

关于java - Runnable实例中的ExecutorService awaitTermination关闭信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34657803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com