You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.3 KiB
Java

package eu.dnetlib.enabling.resultset;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import eu.dnetlib.miscutils.functional.UnaryFunction;
public class ParallelMappedResultSetFactory extends MappedResultSetFactory {
private ExecutorService executor;
private static final int QUEUE_SIZE = 40;
private int queueSize = QUEUE_SIZE;
private int cpus = 0;
public ParallelMappedResultSetFactory() {
super();
if (cpus == 0)
cpus = getNumberOfCPUs();
executor = new ThreadPoolExecutor(cpus, cpus, 5, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(queueSize),
new ThreadPoolExecutor.CallerRunsPolicy());
}
@Override
public W3CEndpointReference createMappedResultSet(final W3CEndpointReference source, final UnaryFunction<String, String> mapper) {
return getResultSetFactory().createResultSet(new ParallelMappedResultSet(source, mapper, getServiceResolver(), executor));
}
private int getNumberOfCPUs() {
return Runtime.getRuntime().availableProcessors();
}
public int getCpus() {
return cpus;
}
public void setCpus(int cpus) {
if(cpus > 0)
this.cpus = cpus;
}
}