package org.geosdi.geoplatform.jaxb.comparison;
import org.geosdi.geoplatform.jaxb.comparison.task.GPJAXBContextBuilderTaskType;
import org.geosdi.geoplatform.jaxb.comparison.task.factory.GPJAXBContextBuilderComparisonThreadFactory;
import org.geosdi.geoplatform.jaxb.comparison.task.function.GPJAXBContextBuilderTaskFunction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.concurrent.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @author Giuseppe La Scaleia - CNR IMAA geoSDI Group
* @email giuseppe.lascaleia@geosdi.org
*/
public class AbstractAXBContextBuilderComparisonTest {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected int defineNumThreads() {
return 150;
}
long executeMultiThreadsTasks(GPJAXBContextBuilderTaskType taskType) throws Exception {
long time = 0;
int numThreads = defineNumThreads();
ExecutorService executor = Executors.newFixedThreadPool(12,
new GPJAXBContextBuilderComparisonThreadFactory());
List<Callable<Long>> tasks = IntStream.iterate(0, n -> n + 1)
.limit(numThreads)
.boxed()
.map(new GPJAXBContextBuilderTaskFunction(taskType))
.collect(Collectors.toList());
List<Future<Long>> results = executor.invokeAll(tasks);
executor.shutdown();
boolean flag = executor.awaitTermination(1, TimeUnit.MINUTES);
if (flag) {
for (Future<Long> future : results) {
time += future.get();
}
} else {
throw new InterruptedException("Some Threads are not executed.");
}
return time;
}
}