, , - - , , ( ). , Queue (), ( ExecutorService , ), a Pipelineable (aka ) PipelineManager, . , , , , 1 , , , , , .
, n , , , , , () .
JDK ExecutorService, BlockingQueue ( , a ThreadPoolExecutor), , , " ". , , , , , singleThreadExecutor .
()
, , ExecutorService, ThreadPoolExecutor ( ), ; 1, n . - ( , , , !)
public class PipeliningExecutorService<T extends Pipelineable> implements ExecutorService {
private Map<Key, ExecutorService> executors;
private ExecutorService generalPurposeExecutor;
@Override
public <T> Future<T> submit(Callable<T> task) {
Pipelineable pipelineableTask = convertTaskToPipelineable(task);
Key taskKey = pipelineable.getKey();
ExecutorService delegatedService = executors.get(taskKey);
if (delegatedService == null) delegatedService = generalPurposeExecutor;
return delegatedService.submit(task);
}
}
public interface Pipelineable<K,V> {
K getKey();
V getValue();
}
, ExecutorService , , , - , Pipelineable fallback, ( , ).