[jboss-svn-commits] JBoss Common SVN: r2394 - common-core/trunk/src/main/java/org/jboss/util/threadpool.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 26 19:48:14 EDT 2007
Author: scott.stark at jboss.org
Date: 2007-04-26 19:48:13 -0400 (Thu, 26 Apr 2007)
New Revision: 2394
Modified:
common-core/trunk/src/main/java/org/jboss/util/threadpool/BasicThreadPool.java
Log:
Correct the setMaximumQueueSize implementation
Modified: common-core/trunk/src/main/java/org/jboss/util/threadpool/BasicThreadPool.java
===================================================================
--- common-core/trunk/src/main/java/org/jboss/util/threadpool/BasicThreadPool.java 2007-04-26 23:47:35 UTC (rev 2393)
+++ common-core/trunk/src/main/java/org/jboss/util/threadpool/BasicThreadPool.java 2007-04-26 23:48:13 UTC (rev 2394)
@@ -21,10 +21,12 @@
*/
package org.jboss.util.threadpool;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -263,12 +265,33 @@
public int getMaximumQueueSize()
{
- return queue.remainingCapacity();
+ int maxSize = queue.remainingCapacity() + queue.size();
+ return maxSize;
}
+ /**
+ * This resets the work queue capacity. This requires recreating the
+ * work queue and ThreadPoolExecutor, so this needs to be called
+ * before doing any work with the pool.
+ *
+ * @param new work queue capacity
+ */
public void setMaximumQueueSize(int size)
{
- //
+ // Reset the executor work queue
+ ArrayList tmp = new ArrayList();
+ queue.drainTo(tmp);
+ queue = new LinkedBlockingQueue(size);
+ queue.addAll(tmp);
+
+ ThreadFactory tf = executor.getThreadFactory();
+ RejectedExecutionHandler handler = executor.getRejectedExecutionHandler();
+ long keepAlive = executor.getKeepAliveTime(TimeUnit.SECONDS);
+ int cs = executor.getCorePoolSize();
+ int mcs = executor.getMaximumPoolSize();
+ executor = new ThreadPoolExecutor(cs, mcs, keepAlive, TimeUnit.SECONDS, queue);
+ executor.setThreadFactory(tf);
+ executor.setRejectedExecutionHandler(handler);
}
public int getPoolSize()
More information about the jboss-svn-commits
mailing list