二、线程的状态和方法

线程的状态

上面提到了“就绪”这么个概念,那么线程还有哪些状态呢,这些状态之间又有什么联系呢,下面结合图片做详细的解释(java中的线程状态比较简单)。
QQ截图20161209013122.png
  • 创建对象,此时只是在内存中有一个线程对象。
  • 就绪状态,调用start(),此时进度就绪状态,但是此状态并不代表会立即执行,此时只是说明此线程万事具备只欠东风,CPU随时可以调用。
  • 运行状态,此时run方法被执行。
  • 堵塞状态,此时由于某些原因,线程暂停了,线程卡死了。
    以下情况会导致线程的堵塞:
    1、线程调用sleep方法主动放弃所占用的处理器资源
    2、线程调用了堵塞式IO方法,在该方法返回前都会堵塞
    3、线程试图获得一个同步监视器,但该同步监视器正在其他线程所持有(即当前线程所需锁,被其他线程锁持有)。
    4、线程在调用wait方法,处于等待状态
    5、调用suspend方法,线程被挂起。这个方法容易导致死锁,而且已经弃用了。只做了解。
    解除线程堵塞的几种情况,可以使线程重新进入就绪状态:
    1、调用了sleep方法的线程过了指定的时间
    2、调用了阻塞式IO方法已经返回
    3、线程成功取得了锁
    4、线程处于等待状态时,收到了其他线程调用notify/notifyAll通知
    5、处于挂起的线程调用了resume恢复方法(此方法也已经废弃)
  • 终止状态,线程执行完毕或者被强行杀死,此时线程处于中止状态。
 

常用方法

以上五种状态,Thread类中提供了各种方法,可以使得线程在这几种状态中相互转换。具体会导致线程堵塞的方法,上面已经说明。
QQ截图20161209013905.png





posted @ 2016-12-29 10:57  Pullein  阅读(228)  评论(0编辑  收藏  举报