java - javafixedThreadPool可以被多个线程使用吗

标签 java web-services concurrency threadpool executorservice

我有一个网络服务,它在返回结果之前执行多个小型计算。我想使用 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/

相关文章:

java - JPA 强制转换异常

web-services - 使用 gin-gonic 编写 Web 服务的最佳实践是什么

web-services - 在一个 POST 命令中卷取多个数据

java - 在消费者线程收到同步更改通知并退出后,处理生产者线程的正确方法是什么?

concurrency - 并行编程入门

Java并发-synchronized方法不起作用

java - 为什么要以静态方式访问静态字段?

java - 如何进入 eclipse 类(class)?

java - 使用 Criteria Hibernate 查询对象

c - 用C语言设计 "web app"后端的方法?