线程池的抽象接口
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);
}
}
首先参数中,
初始线程数,核心线程数,最大线程数。
为什么要设置初始线程呢?
- 减少线程的创建开销
- 应对瞬时任务的负载
- 平滑适应任务:不会让突然增加大量线程。