线程生命周期
整体图
状态解释
- New: Thread 已被创建,但是还没执行start
- Runnable: 对于JVM来说 表示程序正在执行,但是它有可能正在等待CPU的时间片
- blocked: 等待 monitor lock,以待 进入 同步代码块或者同步方法
- Waiting: 等待另一个线程执行一些指定的方法 如 wait() -> notify()
- Time_waiting: 与 Waiting 的唯一区别是,等待一个之间后,才会响应另一个线程执行的指定方法
- Terminated: 线程已经执行完
join()
t.join()
表示主线程会等待t线程执行完成后,才会继续往下执行。
源码里调用的还是 Object.wait(0) 进行等待
Thread.yield()
表示当前线程 放弃当前的CPU使用权限,然后和其他线程一同竞争下一次的CPU使用权限。
对应于上图的 Ready to Run
Thread.sleep
Thread类的方法,不释放锁。占着CPU,不工作。
Sleep 0 秒后,进入 Runnable 状态。
wait
wait:Object的方法,释放锁,一般与(notify或notifyAll)使用。不占用CPU。
当使用 wait和 notifyAll 用于 生产消费模型时,wait的使用:
1 | synchronized (obj) { |
notify或notifyAll
notify 使用不当可能会造成死锁,建议使用 notifyAll
https://blog.csdn.net/liuchuanyangyan/article/details/56668153