繁体   English   中英

Java ScheduledExecutorService生产者\\消费者

[英]Java ScheduledExecutorService producer\consumer

我有下一个项目:

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

我有一些要处理的信息的队列。 该队列定期更新(但仅在它为空时更新)。

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

对于调度,我想使用ScheduledExecutorService。

我有几个问题\\问题:

  1. 如何保持这个队列? 我认为这应该是全球性的。 我应该在某些“ holder”类中使其静态吗? 这不是可怜的打算吗?

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

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

  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放在哪里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM