in src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java [103:132]
protected ThreadPoolExecutor createService(String id, ExecutorConfig config) {
if (config.getQueueSize() != 0 && config.getCorePoolSize() == 0) {
throw new IllegalArgumentException("CorePoolSize must be > 0 when using a capacity queue");
}
BlockingQueue<Runnable> queue;
if (config.getQueueSize() == 0) {
queue = new SynchronousQueue<Runnable>();
} else if (config.getQueueSize() < 0 || config.getQueueSize() == Integer.MAX_VALUE) {
queue = new LinkedBlockingQueue<Runnable>();
} else {
queue = new ArrayBlockingQueue<Runnable>(config.getQueueSize());
}
ThreadFactory factory = new DefaultThreadFactory(id, config.isThreadDaemon(), config.getThreadPriority());
RejectedExecutionHandler handler = (RejectedExecutionHandler) FactoryFinder.find(RejectedExecutionHandler.class.getName(),
ThreadPoolExecutor.CallerRunsPolicy.class.getName());
ThreadPoolExecutor service = new ThreadPoolExecutor(config.getCorePoolSize(),
config.getMaximumPoolSize() < 0 ? Integer.MAX_VALUE : config.getMaximumPoolSize(), config
.getKeepAliveTime(), TimeUnit.MILLISECONDS, queue, factory, handler);
if (config.isAllowCoreThreadTimeOut()) {
try {
Method mth = service.getClass().getMethod("allowCoreThreadTimeOut", new Class[]{boolean.class});
mth.invoke(service, new Object[]{Boolean.TRUE});
} catch (Throwable t) {
// Do nothing
}
}
return service;
}