给线程池增加自动扩充,闲时自动回收线程的功能
首先我们给SimpleThreadPool定义三个成员属性:最小线程数量,活跃线程数量,最大线程数量。
同样构造方法修改一下:
我们程序默认开启最小线程数量,当他不够用的时候我们扩充到活跃线程数量,当活跃线程数量不够的时候我们扩充到最大线程数量。
那么应该在什么位置控制THREAD_QUEUE呢?当然是由SimpleThreadPool控制了,所以我们用SimpleThreadPool继承Thread来实现他的run方法:
运行效果如下:
全部代码如下:
package com.thread.thread22;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
/**
* 自定义简单线程池
* 任务队列、拒绝策略
*/
public class SimpleThreadPool extends Thread {
/**
* 最小线程数量
*/
private int min;
/**
* 活跃线程数量
*/
private int active;
/**
* 最大线程数量
*/
private int max;
/**
* 传参线程池大小(当前线程池中线程的数量)
*/
private int size;
/**
* 线程队列的大小
*/
private final int queueSize;
/**
* 拒绝策略
*/
private final DiscardPolicy discardPolicy;
/**
* 线程池是否被销毁
*/
private volatile boolean destroy = false;
/**
* 默认最小线程数量
*/
private static final int