线程池的抽象接口
public interface SelfThreadPool {// 提交任务到线程池void execute(Runnable runnable);//关闭void shutdown();//获取线程池初始化的大小int getInitSize();//获取线程池最大的大小int getMaxSize();// 获取线程池核心线程数量,int getCoreSize();// 获取活跃线程数量, 活跃线程是正在执行任务的线程数量int getActiveCount();//获取线程池缓存队列大小int getQueueSize();//查看线程是否被销毁boolean isShutdown();
}
任务队列的抽象接口
//线程池的任务队列
public interface RunnableQueue {// 提交任务到缓存队列void offer(Runnable runnable);//取出任务Runnable take();//获取队列中线程数量int size();
}
自定义的异常,后面用于拒绝策略
//自定义异常
public class RunnableDenyException extends RuntimeException{public RunnableDenyException(String msg){super(msg);}
}
首先参数中,
初始线程数,核心线程数,最大线程数。
为什么要设置初始线程呢?
- 减少线程的创建开销
- 应对瞬时任务的负载
- 平滑适应任务:不会让突然增加大量线程。