Java ScheduledExecutor服务生产者消费者



我有下一个项目:

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

我有一个队列,里面有一些信息要处理。这个队列会定期更新(但只是在它为空的时候)。

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

对于日程安排,我想使用ScheduledExecutiorService。

我有几个问题:

  1. 如何保持此队列?我认为它应该是全球性的。我应该在某个"holder"类中将其设置为静态吗?这不是一个糟糕的设计吗?

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

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

  4. ArrayBlockingQueue适用于这种情况吗?

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

最新更新