2

我有下一个项目:

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

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

此外,我有几个线程定期从这个队列和进程中排队数据。

对于调度,我想使用 ScheduledExecutorService。

我有几个问题\问题:

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

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

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

  4. ArrayBlockingQueue 对这种情况有好处吗?

4

1 回答 1

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