压栈:拷贝一个方法压入栈
新建,就绪,运行,等待,阻塞,死亡
都是立刻让出CPU?
wait:释放cpu,释放锁
sleep:不释放锁,其他线程没有资格执行
jstack命令
内存中共享变量
notify():唤醒
wait():等待,使用wait方法需要先获得该对象的锁
两者配合使用
实现方式:底层使用虚引用
实现原理:每个线程使用都会拷贝一份
对线程有一个很好的管理
public interface ThreadPool<Job extends Runnable>{
//执行一个job,这个job需要实现runnable
void execute(Job job);
//关闭线程池
void shutdown();
//增加工作者线程
void addWorkers(int num);
//减少工作者线程
void removeWorker(int num);
//得到正在等待执行的任务数量
int getJobSize();
}
核心线程数:队列没有满时。最初提交一个任务,该线程就处于一直运行状态(即使此时已经没有任务了),提交第二个任务时,如果此时已开启的线程数小于核心线程数,无论此时其他线程是否空置,都会创建新的线程
最大线程数
队列
超时时间
时间单位
拒绝策略:队列满了,最大线程数仍然处理不过来就需要开启该策略