线程的基本概念
# java 线程生命周期
状态类型在枚举类java.lang.thread.State中定义
- NEW-新建:线程刚创建,还没有启动
- RUNNABLE-就绪:可运行(已进入cpu就绪队列,等待分配时间片)或正在运行
- BLOCKED-阻塞:等待其他线程释放锁
- WAITING-等待:进入条件等待状态,调用线程的wait方法进入等待状态,调用notify方法线程继续工作,典型应用:生产者与消费者线程
- TIMED_WAITING-计时等待:与WAITING类似,TIMED_WAITING有时间限制,即:在调用wait方法时,传入一个时间
- TERMINATED-终止:线程正常退出或者异常退出,不可再次启动
java 线程的RUNNABLE
状态,包括了曹组系统线程的就绪
和运行
状态。
操作系统线程的阻塞
状态,包括了 java 的线程的BLOCKED
、WAITING
和TIMED_WAITING
三个状态。
状态转换
- NEW -> RUNNABLE
- 调用了
Thread.start()
方法
- 调用了
- RUNNABLE -> BLOCKED
- 等待或则
synchronized
隐式锁
- 等待或则
- RUNNABLE -> WAITING
- 调用 Object.wait()进入 WAITING 状态,调用 Object.notify()、Object.notifyAll() 进入 RUNNABLE 状态
- Thread.join(),a 线程代码上调用 b.join()(b 此时是 WAITING),在 a 运行结束之后 b 继续执行(b 进入 RUNNABLE)
- LockSupport.park()会进入 WAITING 状态,再调用 LockSupport.unpark(Thread thread) 会进入 RUNNABLE 状态
- RUNNABLE -> TIMED_WAITING
- Thread.sleep(long millis)
- Object.wait(long timeout)
- Thread.join(long millis)
- LockSupport.parkNanos(Object blocker, long deadline)
- LockSupport.parkUntil(long deadline)
- RUNNABLE -> TERMINATED
- 线程执行完 run() 方法后,自动转换到 TERMINATED 状态
Last Updated: 2024/04/23, 01:30:37