gpt4 book ai didi

Java TimerTask 应该等待阻塞队列

转载 作者:行者123 更新时间:2023-12-01 17:28:43 24 4
gpt4 key购买 nike

我有以下设计:

有一个任务扩展了TimerTask,并且计划每分钟运行一次。此任务将尝试从中央队列(作为单个消费者)获取项目并将其表示形式写入文件中。

此外,还有多个生产者不时将项目放入中央队列。

我感兴趣的是,每次执行任务(执行 run() 方法)时,如果有项目,它将从队列中提取所有项目,如果有没有任何项目不执行任何操作。

如果队列已满,生产者应该在队列上 hibernate 。

我对这个问题的解决方案是:

创建扩展 TimerTask 的 ExtractTask。ExtractTask 将包含一个 BlockingQueue。每个生产者将通过执行 getQueue() 方法接收对队列实例的引用。生产者将执行 BlockingQueue.put() 方法。消费者将在 run() 中执行 BlockingQueue.poll() 方法。

你能提出更好的设计吗?我的设计是否包含任何有问题的场景案例?此设计可能会遇到任何同步问题吗?

最佳答案

我愿意:

  • 将队列与设计中的任务分开,
  • 注入(inject)队列而不是进行查找,
  • 使用 SchedulerService 而不是 TimerTask

除此之外,你已经得到了它。

如果您愿意冒依赖 Spring 的风险,您应该查看 Spring Integration 。您描述的所有组件都在那里。您还可以使用许多其他框架来解决问题,例如 Camel 或 Akka;我的主要观点是,如果不是绝对必要的话,不要自己维护此代码。

免责声明:我有点biased about Spring Integration

关于Java TimerTask 应该等待阻塞队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014115/

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