gpt4 book ai didi

java - 如何在将第一项放入 java ExecutorService 线程队列并删除最后一项时运行任意代码?

转载 作者:行者123 更新时间:2023-11-30 11:51:56 24 4
gpt4 key购买 nike

我有一个执行器(通过 Executors.newFixedThreadPool(int) 获得)。我想在以下情况下运行一些任意代码:a)队列为空并且将一个项目插入队列,并且 b)队列非空并且队列中的最后一个项目被删除。只要满足各自的条件,a) 和 b) 都应该始终运行,例如。如果队列被多次清空和填充,a)和b)将运行多次。

所有这些都应该对执行程序的用户不可见,这意味着代码可能应该在某种实现 ExecutorService 的包装器中。如果需要,我可以在将 newFixedThreadPool() 的结果返回给用户之前包装它。如有必要,我还可以完全实现我自己的 ExecutorServicee。

我想绝对确定 a) 和 b) 在跨多个线程的同步方面表现正确。我不清楚执行此操作的最佳方法。

建议?

最佳答案

作为开始,听起来您想要的只是装饰执行程序使用的 BlockingQueue 实现,以便在调用 add()、offer() 等并且队列为 Empty() 时,您执行 a),当 remove()、take() 等被调用时,导致队列为 isEmpty(),您执行 b)。您甚至可能会在某处找到这样的队列实现。

关于java - 如何在将第一项放入 java ExecutorService 线程队列并删除最后一项时运行任意代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164780/

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