Java 用户进程、守护进程以及线程的生命周期

  • Post author:
  • Post category:java



用户线程


定义:平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程。也就是我们创建出来的那些


守护进程


服务线程,准确地来说就是服务其他的线程,这是它的作用——而其他的线程只有一种,那就是用户线程。所以java里线程分2种,

1、守护线程,比如垃圾回收线程,就是最典型的守护线程。

2、用户线程,就是应用程序里的自定义线程

守护进程是运行在程序后台的线程

守护进程创建的进程,依然时守护进程

守护进程不会影响jvm的退出,当jvm只剩余守护进程时,jvm 进行退出

守护进程在jvm退出时,自动销毁

在守护线程中启动的子线程也是守护线程

守护线程不建议进行写操作, 因为守护进程随时可能结束。


守护进程和用户进程的区别


守护进程也叫做“后台进程”,“服务进程”,与用户进程最大的区别在于如果用户进程已经全部退出运行,只剩下守护进程存在,那么java虚拟机就会退出,即只要用户进程结束,不管此时守护进程是否已经结束,虚拟机都会结束。


线程的生命周期


在这里插入图片描述

在图中可以看到一个线程的所有状态,我们先了解一下这些状态的含义。

  • NEW – 初始状态,一个新创建的线程,还没开始执行。
  • RUNNABLE – 可执行的状态,要么是在执行,要么是一切就绪等待执行,例如等待分配CPU时间。
  • WAITING – 等待状态,等待其他的线程去执行特定的动作,没有时间限制。
  • TIMED_WAITING – 限时等待状态,等待其他的线程去执行特定的动作,这个是在一个指定的时间范围内。
  • BLOCKED – 阻塞状态,等待锁,以便进入同步块儿。
  • TERMINATED – 终止状态,线程执行结束。

我们使用start()创建线程的时候并不是说这个线程是开始运行了,而是说它可以去抢占CPU的资源了,也就是进入了Runnable,等到它抢到了资源之后才会进入运行状态Running,我们可以使用yield()直接放弃CPU资源进入Runnable,我们使用sleep()、join()就可以进入阻塞Blocked状态,当sleep()、join()或者IO结束就会重新进入Runnable状态去抢夺资源



版权声明:本文为APCSZDDXM原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。