线程状态与生命周期

Java中的线程的生命周期大体可分为6种状态,要学好它,思路非常简单,只要能搞懂生命周期中各个节点的状态转换机制就可以了,文末我还汇总线程生命周期的常见考点作为补充。
为了助大家掌握好线程状态与生命周期,重点讲解以下5点:
 
1.Java线程的6种状态
2.线程的状态流转全过程
3.线程状态切换细节
4.sleep wait notify yield join的区别
5.线程状态与流转面试必考题详解

 

 

Java 语言中线程共有六种状态,分别是:
1. NEW(初始化状态)
2. RUNNABLE(可运行 / 运行状态)
3. BLOCKED(阻塞状态)
4. WAITING(无时限等待)
5. TIMED_WAITING(有时限等待)
6. TERMINATED(终止状态)

 

 1. 初始状态(new):指的是线程已经被创建,但是还不允许分配 CPU 执行。这个状态属于编程语言特 有的,不过这里所谓的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创建。

使用new创建一个线程对象,仅仅在堆中分配内存空间,在调用start方法之前的线程所处的状态;在此状态下,线程还没启动,只是创建了一个线程对象存储在堆中;比如:
// 自定义线程对象
class MyThread extends Thread {
  public void run() {
    // 线程需要执行的代码
    ......
  }
}
// 创建线程对象
MyThread myThread = new MyThread();
2. 可运行状态(runnable):指的是线程可以分配 CPU 执行。在这种状态下,真正的操作系统线程已经被成 功创建了,所以可以分配 CPU 执行。
当新建状态下的线程对象调用了start方法,该线程对象就从新建状态进入可运行状态(runnable)。
MyThread myThread = new MyThread(); 
// 从 NEW 状态转换到 RUNNABLE 状态 
myThread.start();
可运行状态(runnable):又可以细分成两种状态,ready和running,分别表示就绪状态和运行状态。
  • 就绪状态:线程对象调用start方法之后,等待JVM的调度(此时该线程并没有运行),还未开始运行。
  • 运行状态:线程对象已获得JVM调度,处在运行中;如果存在多个CPU,那么允许多个线程并行运行。

posted @ 2020-04-28 16:56  风灬潇湘  阅读(79)  评论(0)    收藏  举报