gpt4 book ai didi

Java ScheduledExecutorService 生产者\消费者

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:29 25 4
gpt4 key购买 nike

我有下一个项目:

基于Spring(3.2)的Web应用程序(Tomcat 7),在后台我有几个任务。

我有一个队列,其中包含一些需要处理的信息。该队列定期更新(但仅在其为空时)。

此外,我还有几个线程定期将来自此队列和进程的数据加入队列。

对于调度,我想使用 ScheduledExecutorService。

我有几个问题\疑问:

  1. 如何保持这个队列?我认为它应该是全局性的。我应该在某些“持有者”类中将其设为静态吗?这不是一个糟糕的设计吗?

  2. 哪里是使用 ScheduledExecutorService 初始化此队列和所有任务的好地方? ServletContextLoadingListener 是一个好地方吗?有什么方法可以用 Spring 来初始化它吗?

  3. 如果我需要精确控制消费者线程的数量,我应该使用多个 ScheduledExecutorService 实例吗?

  4. ArrayBlockingQueue 适合这种情况吗?

最佳答案

  1. 你可以使用一个普通的类,让 spring 管理它,范围为 singleton .
  2. 您可以使用 init-method 配置 bean在 spring 配置中或实现 InitializingBean类中的接口(interface)。
  3. ScheduledExecutorService 的线程号可以通过构造函数参数进行配置。如果您有多种类型的任务并希望在单独的线程池中运行它们,则可以使用多个 ScheduledExecutorService实例。但是,如果您的所有任务都属于同一类型,我认为不需要多个 ScheduledExecutorService实例。
  4. ScheduledThreadPoolExecutor JDK 中提供了一个类 java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue.DelayedWorkQueue 的内部工作队列。 (并且它是不可配置的)。我不确定你把 ArrayBlockingQueue 放在哪里。

关于Java ScheduledExecutorService 生产者\消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056380/

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