gpt4 book ai didi

java - 不使用全局变量读取线程的当前状态

转载 作者:行者123 更新时间:2023-11-29 03:31:19 25 4
gpt4 key购买 nike

我有一个 ThreadPoolExecutor,它管理 2 个工作线程(可调用对象)。我的工作线程工作是监听 MQ 并将内容写入文件并更新计数。我的要求是当所有线程读取的消息总数等于提交的消息总数时,我需要通过传递 STOP 消息来停止我的工作线程。如何在父线程仍在运行时从我的工作线程中获取计数。

我检查了ThreadPoolExecutor的API,它只有beforeExecute和afterExecute。 afterExecute 对我不起作用,因为我的线程应该在进入 afterExecute 之前先停止。

任何建议表示赞赏。

谢谢

最佳答案

我认为,如果您的工作线程正在主动轮询新消息或正在运行多个请求,那么您走错了路。

Threadpoolexecutor 的想法是,Callable 代表一项任务(在您的示例中:处理一条消息)。如果这样做,您可以使用 ThreadPoolExecutor.shutdown() 来关闭您的工作线程。如果这样做,您只需要一个中央实例,它会跟踪预期的消息量和处理的消息量,并在 processed == expected

之后执行关闭方法

编辑:如果您遵循该模式,则不必监视线程状态,因为 TPE.shutdown() 不会阻止已提交任务的执行,但只会禁止进一步提交.

关于java - 不使用全局变量读取线程的当前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134990/

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