我有一个网络服务,它在返回结果之前执行多个小型计算。我想使用 Executors.newFixedThreadPool()
提供的 ExecutorService
作为实现 Master - Worker 模式的方法(即调用 invokeAll
和让线程等待所有结果完成)。理想情况下,所有 Web 服务线程都使用相同的执行器服务,这样它们就不必都创建自己的线程池,而可以共享一个大池,从而耗尽系统的所有处理时间。
我对这种方法有疑问:
- 从多个线程访问
invokeAll
函数是否安全。 - 执行器服务是否会按顺序处理请求(即,首先处理线程 1 的所有任务,然后处理线程的任务
- 是否有办法拥有 10 个工作线程,并且最大可用线程数取决于传入的请求数量,假设我们有 1 个请求,它会使用所有 10 个线程来处理该请求。如果您有 2 个请求,它会将每个请求分成 5 个线程等。
最佳答案
在 Java EE 服务器中操作时,不应自行创建线程。我意识到这不是很好的情况,因此您应该根据您正在使用的应用程序服务器调查替代方案。如果是WebSphere或Weblogic,则应该使用WorkManager commonj 规范的一部分,它提供了您想要的确切功能。还有一个针对 JBoss 的实现也是如此。
您应该考虑在托管环境中创建自己的线程作为最后的手段。
关于java - javafixedThreadPool可以被多个线程使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/323945/