1.1 java有几个线程
俩个,main线程和gc线程
1.2 java不是真的可以开辟线程
底层c++ 调用本地方法
1.3 并发、并行
并发:模拟多线程
并行:多个线程同时执行
1.4 线程有几个状态
6个,源码Thread.Status枚举类型
NEW:创建
RUNNABLE: 运行
BLOCKED:阻塞
WAITING:等待
TIMED_WAITING:超时等待
TERMINATED:终止
1.5 wait和sleep
wait:是Object类,会释放锁,必须在同步代码块使用,不需要捕获异常
sleep:是线程类,不会释放锁,可以在所有地方使用,需要捕获异常
1.6 synchronized和Lock
1. synchronized是关键字,lock是类
2. syn无法判断锁状态,lock可以
3. syn自动释放,lock需要手动
4. syn锁住的线程会一直等待,lock则不会
5. syn是可重入锁不可中断,非公平锁,lock是可为公平和非公平(入参中传入true和false)
6. syn用于少量代码,lock推荐大量代码使用
细节
syn中线程等待不要用if,得while
1.7 创建线程的方式
1. Thread
2. Runnable
3. callable 与其他俩个的区别是有返回值