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状态去抢夺资源

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值