1.线程状态
- 初始化状态
- 就绪状态
- 运行状态
- 死亡状态
- 阻塞状态
- 超时等待
- 等待状态
1.1 初始化状态
通过实现Runnable接口,new出来实例,线程进入初始化状态
1.2 就绪状态
初始化状态调用start()方法,程序进入了就绪状态。
①调用start(),sleep()结束,join()方法结束,调用yield()方法。
②某个线程拿到对象锁,锁池里的对象拿到对象锁。
③当前时间片用完。
1.3 运行状态
线程抢占到CPU资源。
1.4 死亡状态
线程正常执行完、调用stop()方法、抛出异常或ERROR。
1.5 阻塞状态
发生I/O输入,进入同步代码块
1.6 超时等待
执行Thread.sleep()方法,此方法是Thread内的方法,会抛出异常。
1.7 等待状态
调用Object里的wait()方法。
比较点 | wait() | sleep() |
所属类 | Thread | Object |
控制资源 | 释放资源,让出CPU | 不释放资源,仅仅让出CPU |
方法结束时刻 | 调用notify()或notifyAll() | 超时时间到 |
调用方法后线程状态 | 线程释放对象锁,进入等待锁池 | 指定时间不运行 |
方法调用结束后 | 等待notify()、或者notifyAll()同步方法执行完拿到锁, 进入就绪状态 |
方法调用结束,进入就绪状态 |
1.7 线程状态的切换