线程的5种状态及其之间的切换

参考书籍:java多线程编程核心技术
线程的5种状态及其之间的切换_第1张图片
如上图所示:

我们可以清楚的看到线程的几种状态

1.新建:使用NEW关键字来创建线程。

2.可运行:当前线程调用start()方法,使线程处于Runnable 状态,等待获取CPU。

3.运行中:如果线程抢到了CPU资源,这时的线程处于Running状态,Runnable和Running是可以相互切换的,比如,其他优先级较高线程抢占CPU资源,这时候线程就会变为Runnable状态。
进入Runnable状态大体分为5种:

  • 线程调用sleep()方法经过的时间超过了指定的时间。
  • 线程正在等待某个通知,其他线程发出了通知。
  • 处于挂起的线程调用resume()方法。
  • 线程调用的阻塞IO已返回,阻塞方法执行完毕。
  • 线程成功的获取到了同步监视器。

4.阻塞:出现Blocked的情况大概分为5种

  • 线程调用sleep()方法,主动放弃占用的CPU资源。
  • 线程调用wait()方法,等待某个通知。
  • 线程调用suspend()方法将线程挂起,容易导致死锁,尽量避免使用此方法。
  • 线程调用阻塞式IO方法,在方法返回前,线程被阻塞。
  • 线程试图获得一个同步监视器,但该同步监视器被其他线程所持有。

5.死亡:run()方法运行结束后进入销毁阶段,整个线程执行完毕。

你可能感兴趣的:(多线程)