线程有哪些状态?状态之间怎样转换?
先自己想一想,再看参考要点
参考要点
- NEW 是创建后还没有启动,start() 后进入 RUNNABLE,可能正在运行,也可能在等 CPU
- 等待进入 synchronized 时为 BLOCKED,拿到锁后回到 RUNNABLE
- 无参的 wait()、join() 和 park() 进入 WAITING,等其它线程唤醒(被 notify() 唤醒后要先重新竞争锁,这时为 BLOCKED),sleep() 和带超时的 wait()、join() 进入 TIMED_WAITING,时间到自动唤醒
- 执行完或因异常结束为 TERMINATED,等待 ReentrantLock 的线程是 WAITING 而不是 BLOCKED