I am writing a java program that needs to monitor a number of machines in parallel. This number is not fixed, it can vary (increase/decrease) at any time during the program execution.
I was thinking of doing something like this:
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);
}
But I having trouble picking the most suitable Executor (EXEC2) for this case: FixedThreadPool, CachedThreadPool, Custom Implementation, ...
It needs to say that each monitoring task is about 2/3 seconds long.
Can anyone give me any advice?