java - 如何管理执行者

标签 java concurrency executors

在我的实践中,我开发的软件变得庞大而复杂,并且它的各个部分以自己的方式使用执行器的情况并不少见。从性能的角度来看,最好在每个部分使用不同的线程池配置。但是从可维护性和代码可用性的角度来看,如果所有与线程、并发性和 CPU 利用率相关的东西都保存并配置在某个集中的地方,那将是更可取的。

让每个需要并发执行或调度的类都创建自己的线程池是不行的,因为很难控制它们的生命周期和线程总数。

创建某种 ExecutorManager 并在应用程序周围传递一个线程池也不行,因为根据任务类型和提交率,工作队列和线程池大小的组合配置不当会严重损害性能。

所以问题是:是否有一些通用的方法可以解决这个问题?

最佳答案

我会创建 2 或 3 个线程池,它们可以根据它们执行的任务进行不同的配置,如果有超过 3 个不同的并发操作,你就会遇到更大的问题。

池可以在需要时注入(inject)(例如通过名称),另外我会创建一个注释来使用 AOP(例如 aspectj)使用特定的池/执行程序执行定义的方法。

注解解析器应该有权访问所有池/执行器,并使用注解中指定的任务提交任务。

例如:

@Concurrent ("pool1")
public void taskOfTypeOne() {
}

@Concurrent ("pool2")
public void taskOfTypeTwo() {
}

关于java - 如何管理执行者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8096029/

相关文章:

java - 显示其他对象内部的对象值

python - 测量 python 多处理中浪费的时间

java并发条件合适的用法

Java:如何将数组传递给方法

java - 如何在运行时清理 OSGi 包缓存

java - Executor 内部的数据结构

java - FutureTasks 和 CachedThreadPool 是如何工作的

java - 有没有一种简单的方法可以告诉 Java Executor 在给定时刻正在运行哪些任务?

java - Z3 java 中的替换

go - 如何计算可运行状态下goroutine的数量