package org.ovirt.engine.core.utils; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; public final class SyncronizeNumberOfAsyncOperations { private int _numberOfOperations; private ISingleAsyncOperationFactory _factory; public SyncronizeNumberOfAsyncOperations(int numberOfOperations, ArrayList<?> parameters, ISingleAsyncOperationFactory factory) { _numberOfOperations = numberOfOperations; _factory = factory; _factory.initialize(parameters); } public void execute() { List<AsyncOpThread> operations = new ArrayList<>(); for (int i = 0; i < _numberOfOperations; i++) { operations.add(new AsyncOpThread(i)); } if (_numberOfOperations > 0) { ThreadPoolUtil.invokeAll(operations); } } private class AsyncOpThread implements Callable<Void> { private int currentEventId; public AsyncOpThread(int currentEventId) { this.currentEventId = currentEventId; } @Override public Void call() { ISingleAsyncOperation operation = _factory.createSingleAsyncOperation(); operation.execute(currentEventId); return null; } } }