扰扰博客

动态修改线程池参数

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;
    }
}

 

posted @ 2025-09-16 20:00  扰扰  阅读(12)  评论(0)    收藏  举报