import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** 动态线程池*/ public class DynamicThreadPool extends ThreadPoolExecutor {private final Object lock = new Object();private int minPoolSize;public DynamicThreadPool(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,BlockingQueue<Runnable> workQueue) {super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);this.minPoolSize = corePoolSize;}public DynamicThreadPool(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory) {super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);this.minPoolSize = corePoolSize;}/*** 设置新的核心线程数*/public void setCorePoolSize(int newCorePoolSize) {if (newCorePoolSize < 0) {throw new IllegalArgumentException("核心线程数不能为负数");}if (newCorePoolSize > getMaximumPoolSize()) {throw new IllegalArgumentException("核心线程数不能大于最大线程数");}synchronized (lock) {this.minPoolSize = newCorePoolSize;super.setCorePoolSize(newCorePoolSize);}}/*** 设置新的最大线程数*/public void setMaximumPoolSize(int newMaximumPoolSize) {if (newMaximumPoolSize <= 0) {throw new IllegalArgumentException("最大线程数必须为正数");}if (newMaximumPoolSize < getCorePoolSize()) {throw new IllegalArgumentException("最大线程数不能小于核心线程数");}synchronized (lock) {super.setMaximumPoolSize(newMaximumPoolSize);}}/*** 获取最小线程数*/public int getMinPoolSize() {return minPoolSize;} }