我有下一个项目:
基于Spring(3.2)的Web应用程序(Tomcat 7),在后台我有几个任务。
我有一个包含一些处理信息的队列。此队列定期更新(但只是在它为空时)。
此外,我还有几个线程会定期将此队列和进程中的数据排入队列。
为了安排我想使用ScheduledExecutorService。
我有几个问题\问题:
如何保留此队列?我认为它应该是全球性的。我应该在某个“持有人”课程中使其静止吗?这不是一个糟糕的设计吗?
使用ScheduledExecutorService初始化此队列和所有任务的好地方在哪里? ServletContextLoadingListener是一个好地方吗?有没有办法用Spring初始化它?
如果我需要准确控制使用者线程的数量,是否应该使用多个ScheduledExecutorService实例?
ArrayBlockingQueue会对这种情况有好处吗?
答案 0 :(得分:1)
singleton
管理它。init-method
配置bean,或在您的班级中实现InitializingBean
接口。ScheduledExecutorService
的线程号可通过构造函数参数进行配置。如果您有多种类型的任务并希望在单独的线程池中运行它们,则可以使用多个ScheduledExecutorService
实例。但是,如果您的所有任务属于同一类型,我就不会发现需要多个ScheduledExecutorService
个实例。ScheduledThreadPoolExecutor
具有类java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue.DelayedWorkQueue
的内部工作队列(并且不可配置)。我不知道你把ArrayBlockingQueue放在哪里。