线程的几种状态

目录

前言

一、线程是什么?

二、线程状态

1.新建状态(New)

2.就绪状态(Runnable)

3.运行状态(Running)

4.阻塞状态(Blocked)

5.等待状态/超时等待(Waiting/Timed_Waiting)   

sleep() 和 wait() 的区别:

6.终止状态(Terminated)

总结


前言

线程从创建、运行到结束总是处于下面六个状态之一:新建状态、就绪状态、运行状态、阻塞状态、等待状态及终止状态。

一、线程是什么?

线程(Thread):轻量级进程,是操作系统进行调度的最小单位。一个线程是一个任务(一个程序段)的一次执行过程。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程内,多个线程共享进程的资源。一个进程至少有一个线程。

二、线程状态

线程的几种状态_第1张图片

                                                             线程状态的转换图

1.新建状态(New)

       新创建了一个线程对象,但还没有调用start()方法。实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了新建状态。

2.就绪状态(Runnable)

       新建状态的线程,调用线程的start()方法,此线程进入就绪状态。

3.运行状态(Running)

       当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法。

4.阻塞状态(Blocked)

       线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。

5.等待状态/超时等待(Waiting/Timed_Waiting)   

       线程进入等待状态有三种方式:

       1. cpu调度给优先级更高的线程

       2. 线程要等待获得资源或者信号

       3. 时间片的轮转,时间片到了,进入等待状态

       在可执行状态下,如果调用 sleep()、  wait()等方法,线程都将进入等待状态。

sleep() 和 wait() 的区别:

       sleep方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出CPU给其他的线程,但是不会释放对象锁资源以及监控的状态,当指定的时间到了之后又会自动恢复运行状态。
       wait方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify方法后本线程才能够进入对象锁定池准备获取对象锁进入运行状态。

6.终止状态(Terminated)

       表示该线程已经执行完毕。当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦终止了,就不能复生。

总结

线程的特点:

  • 一个线程是一个任务(一个程序段)的一次执行过程。
  • 线程不占有内存空间,它包括在进程的内存空间中。
  • 线程比进程开销小,更加轻量。
  • 在同一进程内,多个线程可以并发执行。
  • 在同一进程内,多个线程共享进程的资源。

你可能感兴趣的:(java)