ThreadPoolTaskScheduler allows for setPoolSize changes at runtime
Also exposing "getPoolSize()" and "getActiveCount()" from ThreadPoolTaskScheduler now, analogous to ThreadPoolTaskExecutor. Issue: SPR-10883
This commit is contained in:
parent
e523152653
commit
e8c0ef8305
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -154,9 +154,7 @@ public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport impleme
|
|||
* Specify whether to allow core threads to time out. This enables dynamic
|
||||
* growing and shrinking even in combination with a non-zero queue (since
|
||||
* the max pool size will only grow once the queue is full).
|
||||
* <p>Default is "false". Note that this feature is only available on Java 6
|
||||
* or above. On Java 5, consider switching to the backport-concurrent
|
||||
* version of ThreadPoolTaskExecutor which also supports this feature.
|
||||
* <p>Default is "false".
|
||||
* @see java.util.concurrent.ThreadPoolExecutor#allowCoreThreadTimeOut(boolean)
|
||||
*/
|
||||
public void setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) {
|
||||
|
|
@ -225,7 +223,11 @@ public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport impleme
|
|||
* @see java.util.concurrent.ThreadPoolExecutor#getPoolSize()
|
||||
*/
|
||||
public int getPoolSize() {
|
||||
return getThreadPoolExecutor().getPoolSize();
|
||||
if (this.threadPoolExecutor == null) {
|
||||
// Not initialized yet: assume core pool size.
|
||||
return this.corePoolSize;
|
||||
}
|
||||
return this.threadPoolExecutor.getPoolSize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -233,7 +235,11 @@ public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport impleme
|
|||
* @see java.util.concurrent.ThreadPoolExecutor#getActiveCount()
|
||||
*/
|
||||
public int getActiveCount() {
|
||||
return getThreadPoolExecutor().getActiveCount();
|
||||
if (this.threadPoolExecutor == null) {
|
||||
// Not initialized yet: assume no active threads.
|
||||
return 0;
|
||||
}
|
||||
return this.threadPoolExecutor.getActiveCount();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -62,14 +62,18 @@ public class ThreadPoolTaskScheduler extends ExecutorConfigurationSupport
|
|||
/**
|
||||
* Set the ScheduledExecutorService's pool size.
|
||||
* Default is 1.
|
||||
* <p><b>This setting can be modified at runtime, for example through JMX.</b>
|
||||
*/
|
||||
public void setPoolSize(int poolSize) {
|
||||
Assert.isTrue(poolSize > 0, "'poolSize' must be 1 or higher");
|
||||
this.poolSize = poolSize;
|
||||
if (this.scheduledExecutor instanceof ScheduledThreadPoolExecutor) {
|
||||
((ScheduledThreadPoolExecutor) this.scheduledExecutor).setCorePoolSize(poolSize);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide an {@link ErrorHandler} strategy.
|
||||
* Set a custom {@link ErrorHandler} strategy.
|
||||
*/
|
||||
public void setErrorHandler(ErrorHandler errorHandler) {
|
||||
Assert.notNull(errorHandler, "'errorHandler' must not be null");
|
||||
|
|
@ -111,6 +115,47 @@ public class ThreadPoolTaskScheduler extends ExecutorConfigurationSupport
|
|||
return this.scheduledExecutor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the underlying ScheduledThreadPoolExecutor, if available.
|
||||
* @return the underlying ScheduledExecutorService (never {@code null})
|
||||
* @throws IllegalStateException if the ThreadPoolTaskScheduler hasn't been initialized yet
|
||||
* or if the underlying ScheduledExecutorService isn't a ScheduledThreadPoolExecutor
|
||||
* @see #getScheduledExecutor()
|
||||
*/
|
||||
public ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor() throws IllegalStateException {
|
||||
Assert.state(this.scheduledExecutor instanceof ScheduledThreadPoolExecutor,
|
||||
"No ScheduledThreadPoolExecutor available");
|
||||
return (ScheduledThreadPoolExecutor) this.scheduledExecutor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current pool size.
|
||||
* <p>Requires an underlying {@link ScheduledThreadPoolExecutor}.
|
||||
* @see #getScheduledThreadPoolExecutor()
|
||||
* @see java.util.concurrent.ScheduledThreadPoolExecutor#getPoolSize()
|
||||
*/
|
||||
public int getPoolSize() {
|
||||
if (this.scheduledExecutor == null) {
|
||||
// Not initialized yet: assume initial pool size.
|
||||
return this.poolSize;
|
||||
}
|
||||
return getScheduledThreadPoolExecutor().getPoolSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of currently active threads.
|
||||
* <p>Requires an underlying {@link ScheduledThreadPoolExecutor}.
|
||||
* @see #getScheduledThreadPoolExecutor()
|
||||
* @see java.util.concurrent.ScheduledThreadPoolExecutor#getActiveCount()
|
||||
*/
|
||||
public int getActiveCount() {
|
||||
if (this.scheduledExecutor == null) {
|
||||
// Not initialized yet: assume no active threads.
|
||||
return 0;
|
||||
}
|
||||
return getScheduledThreadPoolExecutor().getActiveCount();
|
||||
}
|
||||
|
||||
|
||||
// SchedulingTaskExecutor implementation
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue