我有几个Quartz计划的任务,这些任务非常IO密集,很容易被分解成多个任务。
由于Spring,这些作业在tomcat容器中被实例化和调度。
如果我在Job和Java容器中使用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);发布于 2012-08-13 06:27:03
是啊你能做到的。但在把你的工作放进去之前。注意以下几点。
你有一个在tomcat的网络应用程序吗?如果是,您的web应用程序是一个高度活跃的高负载门户吗?
如果是,线程作业将从tomcat服务器上删除有价值的处理。
该作业是由线程作业紧密耦合完成,还是需要tomcat?
如果你的工作真的很依赖。您最好创建一个单独的批处理服务器并使用它。您可以查找spring批处理以获得实现。
发布于 2012-08-13 09:15:20
也许,小心点。
请注意,没有任何线程(除了原始线程--让我们调用web应用程序线程)能够可靠地与容器交互。通常,不鼓励在Java运行时中使用线程。但也不是闻所未闻的。
Tomcat选项:
SwingUtilities.invokeLater(Runnable)的Swing事件调度循环;在您的示例中,让工作线程将待完成的工作提交到容器中的容器中,返回到容器安全的web应用线程。当等待工作线程完成时,该线程将运行一个句柄工作循环。https://stackoverflow.com/questions/11928817
复制相似问题