Add more configuration options to TaskRunnerFactory
(cherry picked from commit ebcc1b4eae)
This commit is contained in:
Timothy Bish 2016-01-14 10:41:56 -05:00
parent b32be1bb11
commit 543851ba54
1 changed files with 14 additions and 4 deletions

View File

@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
* Manages the thread pool for long running tasks. Long running tasks are not * Manages the thread pool for long running tasks. Long running tasks are not
* always active but when they are active, they may need a few iterations of * always active but when they are active, they may need a few iterations of
* processing for them to become idle. The manager ensures that each task is * processing for them to become idle. The manager ensures that each task is
* processes but that no one task overtakes the system. This is kinda like * processes but that no one task overtakes the system. This is somewhat like
* cooperative multitasking. * cooperative multitasking.
* *
* @org.apache.xbean.XBean * @org.apache.xbean.XBean
@ -51,7 +51,7 @@ public class TaskRunnerFactory implements Executor {
private boolean dedicatedTaskRunner; private boolean dedicatedTaskRunner;
private long shutdownAwaitTermination = 30000; private long shutdownAwaitTermination = 30000;
private final AtomicBoolean initDone = new AtomicBoolean(false); private final AtomicBoolean initDone = new AtomicBoolean(false);
private int maxThreadPoolSize = Integer.MAX_VALUE; private int maxThreadPoolSize = getDefaultMaximumPoolSize();
private RejectedExecutionHandler rejectedTaskHandler = null; private RejectedExecutionHandler rejectedTaskHandler = null;
private ClassLoader threadClassLoader; private ClassLoader threadClassLoader;
@ -166,7 +166,7 @@ public class TaskRunnerFactory implements Executor {
} }
protected ExecutorService createDefaultExecutor() { protected ExecutorService createDefaultExecutor() {
ThreadPoolExecutor rc = new ThreadPoolExecutor(0, getMaxThreadPoolSize(), getDefaultKeepAliveTime(), TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new ThreadFactory() { ThreadPoolExecutor rc = new ThreadPoolExecutor(getDefaultCorePoolSize(), getMaxThreadPoolSize(), getDefaultKeepAliveTime(), TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new ThreadFactory() {
@Override @Override
public Thread newThread(Runnable runnable) { public Thread newThread(Runnable runnable) {
String threadName = name + "-" + id.incrementAndGet(); String threadName = name + "-" + id.incrementAndGet();
@ -187,9 +187,11 @@ public class TaskRunnerFactory implements Executor {
return thread; return thread;
} }
}); });
if (rejectedTaskHandler != null) { if (rejectedTaskHandler != null) {
rc.setRejectedExecutionHandler(rejectedTaskHandler); rc.setRejectedExecutionHandler(rejectedTaskHandler);
} }
return rc; return rc;
} }
@ -269,6 +271,14 @@ public class TaskRunnerFactory implements Executor {
this.shutdownAwaitTermination = shutdownAwaitTermination; this.shutdownAwaitTermination = shutdownAwaitTermination;
} }
private static int getDefaultCorePoolSize() {
return Integer.getInteger("org.apache.activemq.thread.TaskRunnerFactory.corePoolSize", 0);
}
private static int getDefaultMaximumPoolSize() {
return Integer.getInteger("org.apache.activemq.thread.TaskRunnerFactory.maximumPoolSize", Integer.MAX_VALUE);
}
private static int getDefaultKeepAliveTime() { private static int getDefaultKeepAliveTime() {
return Integer.getInteger("org.apache.activemq.thread.TaskRunnerFactory.keepAliveTime", 30); return Integer.getInteger("org.apache.activemq.thread.TaskRunnerFactory.keepAliveTime", 30);
} }