簡體   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