黑马程序员——Java多线程—线程的生命周期

来源:互联网 发布:金字塔算法程序 编辑:程序博客网 时间:2024/06/03 16:29


当发生如下情况时,线程将会进入阻塞状态:

1、线程调用sleep方法主动放弃所占用的处理器资源。

2、线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。

3、线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。

4、线程正在等待某个通知。

5、程序调用了线程的suspend方法将该线程挂起(这个方法容易导致死锁,所以应该尽量避免使用该方法)。


当发生如下情况时,可以解除上面发生的死锁:

1、调用sleep方法的线程经过了指定的时间。

2、线程调用的阻塞式IO方法已经返回。

3、线程成功的获得了试图取得的同步监视器。

4、线程正在等待某个通知时,其他线程发出了该通知。

5、处于挂起状态的线程被调用了resume恢复方法。


当发生如下情况时,线程死亡:

1、run()或call()方法执行完成,线程正常结束。

2、线程抛出一个未捕获的Exception或Error。

3、直接调用该线程的stop方法来结束该线程(该方法容易导致死锁,通常不推荐使用)。


为了测试某个线程是否已经死亡,可以调用该线程对象的inAlive方法,当线程处于就绪、运行、阻塞3种状态时,该方法将返回true;当线程处于新建、死亡2种状态时,该方法将返回false。

0 0