1 线程状态
- 初始化(NEW):新建一个线程对象,但是还没有调用start() 方法;
- 运行(RUNNABLE):运行状态包括 就绪(ready)和 运行中(running)两种状态。线程对象创建后被其它线程调用了start()方法,该状态的线程位于可运行线程池中获取cpu使用权限,此时线程状态为 就绪状态(ready)。在就绪状态中的线程获取到cpu时间片后进入 运行中状态(running)。
- 阻塞状态(BLOCKED):线程等待进入临界区,例如:等待另外一个线程中的synchronized块的执行释放(synchronized是重量级锁的时候)
- 等待状态(WAITING):表示有执行权限时调用了它的wait方法,或者是调用了join方法join了其它线程,等待被join的线程执行结束的状态。
- 计时等待(TIME_WAITING):当线程调用了带有超时参数的方法时会导致该线程进入计时等待状态。带有超时参数的方法有:Thread.sleep、Object.wait、Thread.join、Lock.tryLock 和 Condition.await方法。
- 终止状态(TERMINATED):表示该线程已经执行完毕。
线程状态切换
从图中可以看出各个状态之间的切换下面就总结一下:
- 初始状态:实现Runnable接口或继承Thread类可以得到一个线程,new 一个实例线程就进入了初始状态
- 就绪状态:
调用start()
sleep()时间到达、其他线程join()结束、线程拿到了对象锁、等待用户输入完成
运行中的线程cpu时间片用完、调用yield()方法