gpt4 book ai didi

java - 使用ExecutorService并行处理任务

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:55 26 4
gpt4 key购买 nike

我正在编写一个java程序,需要并行监控多台机器。这个数字不是固定的,它可以在程序执行过程中随时变化(增加/减少)。

我正在考虑做这样的事情:

public static void main (String args[]) {

ExecutorService EXEC1 = Executors.newScheduledThreadPool(1);

EXEC1.scheduleWithFixedDelay(new Runnable() {

ExecutorService EXEC2 = Executors.new...
Map<Integer, Future<Void>> monitoringTasks = new HashMap<Integer, Future<Void>>();

@Override
public void run() {

List<Machine> monitorizedMachines = MachineDao.getMonitorizedMachines();

for (Machine machine: monitorizedMachines) {

Future<Void> monitoringTask = monitoringTasks.get(machine.getId());

if(monitoringTask == null || monitoringTask.isDone()) {

monitoringTask = EXEC2.submit(new Runnable() {
@Override
public void run() throws Exception {

// monitor machine....

}
});

monitoringTasks.put(machine.getId(), monitoringTask);
}

}
}

}, 1, 1, TimeUnit.SECONDS);

}

但是我在为这种情况选择最合适的执行器(EXEC2)时遇到了困难:FixedThreadPool、CachedThreadPool、自定义实现,...

需要说明的是,每个监控任务的时长约为2/3秒。

谁能给我一些建议吗?

最佳答案

大多数时候,当您开发基于大型生产的应用程序时,您需要使用 ExecutorService EXEC2 = Executors.newFixedThreadPool(THREAD_COUNT);,并且您需要在使用预期数量的请求/卷进行性能测试之后正确配置THREAD_COUNT

你可以看看here详细了解为什么 newCachedThreadPool() 不适合请求量较大的应用程序。

关于java - 使用ExecutorService并行处理任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com