Java 我应该限制遗嘱执行人的数量吗?

Java 我应该限制遗嘱执行人的数量吗?,java,concurrency,executorservice,executor,Java,Concurrency,Executorservice,Executor,我有一个Java项目,需要并行运行。我是和遗嘱执行人一起做的。问题是,我需要在很多地方使用遗嘱执行人。我应该让几个执行器来做这项工作(暂时忘记限制线程的全局数量),还是最好在需要的地方创建执行器?没有严格的规则告诉您应该使用多少执行器。但有一件事是可以推荐的。使用一些依赖注入机制或框架来注入执行器实现。这将允许快速、轻松地更换和配置使用过的执行器。您真正需要考虑的是控制使用您创建的任何执行器的线程数 您为每个执行器创建的线程数将是每个提交任务的到达频率和预期持续时间(处理时间)的函数。每个逻辑任

我有一个Java项目,需要并行运行。我是和遗嘱执行人一起做的。问题是,我需要在很多地方使用遗嘱执行人。我应该让几个执行器来做这项工作(暂时忘记限制线程的全局数量),还是最好在需要的地方创建执行器?

没有严格的规则告诉您应该使用多少执行器。但有一件事是可以推荐的。使用一些依赖注入机制或框架来注入执行器实现。这将允许快速、轻松地更换和配置使用过的执行器。

您真正需要考虑的是控制使用您创建的任何执行器的线程数

您为每个执行器创建的线程数将是每个提交任务的到达频率和预期持续时间(处理时间)的函数。每个逻辑任务类型都有一个队列,这允许您只为该任务调优执行器,这样您就不会有超过所需的线程数,并且可以始终保持预期的任务吞吐量

如果在应用程序的所有处理阶段都共享一个单片执行器,那么就很难进行调优

是一种典型的并发模式,反映了每个处理阶段的队列原则


在某些情况下,有一个共享的执行器是有意义的,例如对于不频繁的、临时的或低优先级的计划任务。

我的任务在绝大多数情况下都不做任何事情,因此不需要限制并发“执行”线程的数量,也不会有太多的执行。但是,如果线程一直在努力工作,我完全同意你的看法。不管它们在大多数时间里是否在进行大量处理,这仍然取决于你是否关心应用程序中的一种类型的任务是否会导致执行另一种类型的任务的延迟。在一天结束时,每个执行器都绑定到一个或多个线程。您是否愿意在不同的任务类型之间共享这些任务?好的。目前我也在做类似的事情,不过是手工的。当您有一个平面对象结构时,这是可以的。如果你有一个很深的框架,我想你更喜欢有一些框架来为你做,就像你建议的那样。