线程的生命周期(含java虚拟机角度)

一:从普遍意义上说明线程的生命周期

线程的生命周期是指线程从创建到销毁的整个过程,包括以下阶段:

1.新建状态(New):当线程被被创建后就处于新建状态,此时操作系统为线程分配必要的资源(如线程栈、程序计数器、寄存器等),但线程还未执行。

 线程栈:是线程专用的内存区域,保存线程执行时所需的数据。

程序计数器:是一种用于记录程序执行位置的寄存器。       

寄存器:计算机系统中用于存储数据的一种硬件设备,常用于存储临时数据。

2.就绪状态(Runnable):当线程调用start()方法后就进入就绪状态,等待被cpu分配时间片后进入运行状态。

cpu时间片:在多任务操作系统中,操作系统需要将cpu的时间片分配给多个进程或线程,以便它们能交替运行。

3.运行状态(Running):当线程获得cpu时间片后就开始运行,执行它们的任务。

4.阻塞状态(Blocked):在运行状态中,线程可能因为等待要获取的外部资源(等待I/O操作、等待获取锁等)而进入阻塞状态,线程处于阻塞状态时不会占据cpu时间片,但也不会释放占据的资源,直到获取需要的资源后,重新进入就绪状态。

I/O操作:指计算机系统中的输入输出操作。

锁:是计算机系统中用于协调多线程或进程之间共享资源访问的同步机制,防止多线程或进程同时访问共享资源。

5.终止状态(Terminated):线程执行完毕或出现异常时进入终止状态,释放所占据的资源,并将执行结果返回给主线程或其它相关线程。  

 

二.从Java虚拟机角度说明线程的生命周期 

1.新建状态(New):当线程被被创建后就处于新建状态,此时操作系统为线程分配必要的资源(如线程栈、程序计数器、寄存器等),但线程还未执行。

2.运行状态(Runnable):当线程调用start()方法后就进入运行状态,此时线程可能正在执行,也可能只在等待cpu分配时间片。

3.阻塞状态(Blocked):在运行状态中,线程可能因为等待要获取的外部资源(等待I/O操作、等待获取锁等)而进入阻塞状态,线程处于阻塞状态时不会占据cpu时间片,但也不会释放占据的资源,直到获取需要的资源后,才能继续运行。

4.等待状态(Waiting):线程调用 wait()、join() 或 sleep() 方法时,进入等待状态。在等待状态下,线程不会占用cpu时间片,只有当其它线程调用 notify()、notifyAll() 或者 join() 方法时,等待的线程才会重新进入运行状态。

5.超时等待状态(Timed Waiting):线程调用带超时参数的 wait()、join() 或 sleep() 方法时,进入超时等待状态。在超时等待状态下,线程不会占用 cpu 时间片,在指定的时间内如果没有被唤醒,线程会自动重新进入运行状态。

6.终止状态(Terminated):当线程执行完毕或出现异常时,它就进入了终止状态。

等待状态和阻塞状态的区别:

等待状态和阻塞状态都是线程的非运行状态。

等待状态下线程不会占据cpu时间片,同时释放所占据的资源,且线程的等待状态可以被打断,可通过调用方法主动打断等待状态或等线程自动结束等待状态。

阻塞状态下线程不会占据cpu时间片,但也不会释放所占据的资源,且线程的阻塞状态不能被打断,只有等线程获取到所需的资源后线程才会进入运行状态。

猜你喜欢

转载自blog.csdn.net/m0_73249076/article/details/129370918