线程的4种状态

四种状态分别是

1.新建状态(new),   线程对象已经建立,但是还没有启动,所以不能运行

2.就绪状态,   这种状态下,只要调度程序把时间片分给线程,线程就可以运行,在任意时刻线程可以运行也可以不运行,却决于调度程序。

3.死亡状态,   一般为执行完,退出run方法。
4.阻塞状态,   因为等待某一条件而暂停运行。当这一条件满足时,进入就绪状态,等待调度程序调度运行。

进入阻塞状态的原因
1.调用sleep()使线程进入休眠状态,在指定时间内时不会运行的。
2.通过调用wait()方法时线程挂起。知道线程得到notify()或者notifyall()消息,就会进入就绪状态。
3.等待某一输入输出的完成。

4.试图调用某一对象的synchronized同步控制方法。但是又无法获得锁。

tips:

sleep方法和wait()方法不同之处:都能让线程暂停,但wait()方法会释放锁,而sleep方法不会释放锁。wait()只能在同步控制方法里边调用,而sleep()方法则没有这个限制。若在非同步控制方法中调用了wait()编译能通过,但是运行时会得到异常,当线程不是拥有者异常,原因是:当前线程未拥有对象锁。

猜你喜欢

转载自blog.csdn.net/bigseacoming/article/details/80195918