簡體   English   中英

Java EE容器內的並發編程

[英]Concurrent programming inside a Java EE container

我有一些Quartz計划的工作,這些工作非常耗費IO,並且很容易分解為多個任務。

借助Spring,作業可以在tomcat Web容器內實例化並計划。

如果我在Job類內和Java EE容器內使用java.util.concurrent API,可以嗎?

是否可以通過使用和調整FixedThreadPool的大小並放棄幾個內核(例如本示例中的兩個內核)來與Tomcat共享邏輯處理器?

int numberOfCores = Runtime.getRuntime().availableProcessors();
final int poolSize = numberOfCores - 2 // Give away Two slots for TOMCAT
final ExecutorService executorPool = Executors.newFixedThreadPool(poolSize);

是的,你可以做到。 但是在把你的工作放入tomcat之前。 請注意以下幾點。

您在tomcat中有一個Web應用程序嗎? 如果是,您的Web應用程序是一個活躍的高負載門戶嗎?
如果是的話,您的線程作業將剝奪來自tomcat服務器的寶貴處理

作業是由線程作業緊密結合還是需要tomcat?
如果您的工作真的很靠譜。 您最好創建一個單獨的批處理服務器並使用它。 您可以期待spring-batch實現。

也許,小心點。

請注意,沒有任何線程(原始線程除外-我們將其稱為web-app線程)將能夠可靠地與容器進行交互。 通常,不建議在Java EE運行時中使用線程。 這不是聞所未聞的。

Tomcat選項:

  1. Java EE具有WorkManager API tomcat至少有一種實現 我無法說說效果如何。 本文將對此進行更多討論

  2. 啟動您自己的線程。 一個用於管理事物的模型可能是帶有SwingUtilities.invokeLater(Runnable)的Swing事件調度循環。 在您的情況下,請工作線程將要在容器中完成的工作提交回容器安全的Web應用線程。 該線程將在等待工作線程完成時運行處理工作循環。

  3. 啟動工作程序請求返回到tomcat服務器:您的Web應用程序現在充當客戶端(Web服務?)。 這樣的模型可以很好地擴展,以按照AkhilDev的建議將工作分擔給其他服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM