基础回顾-线程的几种状态
线程作为一个程序最基本的组成部分,在Java中存在好几种状态
- NEW: 一个刚创建出来的线程处于该状态下,由于只有刚刚被创建的时候可能处于该状态,所以该状态只能被存在一次
- RUNNABLE: 复合状态,包含READY和RUNNING
- READY:该状态的线程可以被JVM的线程调度器进行调度让处于RUNNING状态
- RUNNING:表示处于该状态的线程正在运行
调用方法举例: - Thread.yield()调用会将对应线程从RUNNING->READY
- BLOCKED: 一个线程发起一个阻塞I/O操作后,或者试图去获得一个由其他线程持有锁时候,相对应的线程会处于该状态,处于该状态的线程不会占用CPU资源
- WAITING:一个线程执行了某些方法调用之后就会处于这种无限等待的状态
- 调用方法使得线程变更WAITING方法:
- Object.wait()
- Thread.join()
- LockSupport.park()
- 将WAITING方法变成RUNNABLE:
- Object.notify()
- Object.notifyAll()
- LockSupport.unpark(thread)
- 调用方法使得线程变更WAITING方法:
- TIMED_WAITING:和WAITING类似,有限时间的等待
- TERMINATED: 已经执行结束的线程处于该状态。