gpt4 book ai didi

java - 在 Java 中将新任务添加到线程池之前等待任务完成的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 00:15:03 25 4
gpt4 key购买 nike

我想使用 ThreadPoolExecutor 之类的东西来管理在可用线程上运行一堆任务。这些任务都是同一类型,但处理不同的帐户。可以定期添加这些帐户的新任务,我希望它进行检查,并且在同一帐户的旧任务完成之前不允许启动新任务。最好的方法是什么?

示例

  1. 帐户“234”的任务已启动(通过 ThreadPoolExecutor.execute())

  2. 帐户“238”的任务已启动(通过 ThreadPoolExecutor.execute())

  3. 帐户“234”的新任务已创建,但未添加执行,因为第一个“234”任务未完成(检查此任务的最佳方法?)

  4. 帐户“238”的任务已完成

  5. 帐户“238”的新任务启动(通过 ThreadPoolExecutor.execute()),因为当前没有为该帐户运行

最好的方法是什么?只需使用 wait/sleep() 检查 Runnable 中的某些检查变量即可完成“234”的第一个任务?或者有更好的解决方案吗?

最佳答案

毫无疑问,对这部分 API 有更多经验的人会有更好的想法,但以下是我对此主题的想法...

基本上,我会从“运行”和“等待”队列开始。 “正在运行”队列跟踪当前正在运行的任务,“等待”队列跟踪您阻止的任务。这些队列需要输入某种“组标识符”,以便更容易查找(即 Map<String, List<Runnable> ),例如您的帐号

我会考虑覆盖 execute方法。在这里,我将传入的任务与正在运行的队列进行比较,以确定当前是否有任何相关任务正在运行。如果有,我会将新任务放入等待队列中。

然后我会覆盖 beforeExecute方法。在这里,我会将任务注册到“正在运行”队列中。

我会重写“afterExecute”方法。在这里,我将从“正在运行”队列中删除已完成的任务,查找等待任务的队列(通过已完成任务的组标识符),并通过execute将队列中的第一个任务添加到执行器中。方法

或者你可以按照路易斯的建议去做:P

关于java - 在 Java 中将新任务添加到线程池之前等待任务完成的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11998519/

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