1、线程包括哪些状态
新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、时间等待(TIME_WALTING)、终止(TERMINATED)
2、线程状态之间是如何变化的?
创建线程对象是新建状态
调用了start()方法转变为可执行状态
线程获取到了CPU的执行权,执行结束是终止状态
在可执行状态的过程中,如果没有获取CPU的执行权,可能会切换其他状态:
- 如果没有获取锁(synchronized或lock)进入阻塞状态,获取锁再切换为可执行状态
- 如果线程调用了wait()方法进入等待状态,其他线程调用notify()唤醒后可切换为执行状态
- 如果线程调用了sleep(50)方法,进入即时等待状态,到时间后可切换为可执行状态