Linux线程的状态与调度
Java线程的6种状态及切换
Java 线程的生命周期中,在 Thread 类里有一个枚举类型 State,定义了线程的几种状态,分别有:
- New
- Runnable
- Blocked
- Waiting
- Timed Waiting
- Terminated
上图有误,根据Blocked注释可知:线程从Waiting或Timed Waiting状态恢复后,应该是去到Blocked状态
Thread state for a thread blocked waiting for a monitor lock. A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method or reenter a synchronized block/method after calling Object.wait.
sleep和wait区别
1、sleep方法是Thread类的静态方法;
wait方法是Object类的成员方法
2、sleep方法使当前线程暂停执行指定的时间,让出cpu给其他线程,但是它的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。在调用sleep方法后,线程不会
释放对象锁;
而当调用wait方法时,线程会
放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池处于准备状态。
3、sleep方法有可能会抛出异常,所以需要进行异常处理;
wait方法不需要处理
4、sleep方法可以在任何地方使用;
wait方法只能在同步方法和同步代码块中使用
评论