压栈:拷贝一个方法压入栈
1.线程的状态
新建,就绪,运行,等待,阻塞,死亡
2.一个类里可以定义多个类,但是只能有一个是public类的
3.进入等待队列的进程要是没人唤醒,那么会一直等待,不会执行
4.wait和sleep的区别
都是立刻让出CPU
wait:释放cpu,释放锁
sleep:不释放锁,其他线程没有资格执行
5.如何查看线程信息
jstack命令
6.线程间的通信:
内存中共享变量
7.notify()以及wait()
notify():唤醒
wait():等待,使用wait方法需要先获得该对象的锁
两者配合使用
8.如何通过jion控制线程执行顺序
9.ThreadLocal
实现方式:底层使用虚引用
实现原理:每个线程使用都会拷贝一份
10.线程池作用
对线程有一个很好的管理
11.线程池这个类中包含几个方法
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();
}
12.线程池一般都有什么配置
核心线程数:队列没有满时。最初提交一个任务,该线程就处于一直运行状态(即使此时已经没有任务了),提交第二个任务时,如果此时已开启的线程数小于核心线程数,无论此时其他线程是否空置,都会创建新的线程
最大线程数
队列
超时时间
时间单位
拒绝策略:队列满了,最大线程数仍然处理不过来就需要开启该策略