线程管理解释

线程管理

线程管理涉及从线程创建到终止的整个生命周期,以及HotSpot VM线程间的协调。线程管理包括Java代码创建的线程、直接与HotSpot VM关联的本地线程,以及HotSpot为其他目的的而创建的内部线程。

线程模型

HotSpot VM的线程模型中,Java线程(java.lang.Thread实例)被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程,当该Java线程终止时,这个操作系统线程也会被回收。Java线程的优先级和操作系统线程的优先级之间关系复杂,各个系统之间不尽相同。

线程创建和销毁

创建
HotSpot VM有两种引入线程的方式,执行Java代码时调用java.lang.Thread对象的start()方法,或者用JNI将已存在本地线程关联到HotSpot VM上。

  • java.lang.Thread实例以Java代码形式表示线程
  • HotSpot VM内部以C++类JavaThread的实例表示java.lang.Thread实例,它包含其他的线程状态追踪信息。
  • OSThread实例代表操作系统进程,它包含了其他操作系统级别的线程状态追踪信息。
    当java.lang.Thread启动时,HotSpot VM创建与之关联的JavaThread和OSThread对象,最后是本地线程。
    销毁
    本地线程初始化后开始执行启动方法,执行java.lang.Thread对象的run()方法,当它返回时,先处理所有未捕获的异常,之后终止该线程,然后与HotSpot VM交互,检查终止线程是否就要终止整个HotSpot VM。终止线程会释放所有已分配的资源,并从已知线程列表移除JavaThread,然后调用OSThread和JavaThread的析构函数,当它的初始启动方法完成时,最终停止运行。

线程状态

HotSpot VM使用多种不同的内部线程状态来表示线程正在做什么。执行不同的操作时,线程状态会发生跃迁,跃迁时会检查线程在该点处理请求的动作是否合适。
线程有如下状态:

  • 新线程:线程正在初始化的过程中
  • 线程在Java中:线程正在执行Java代码
  • 线程在VM中:线程正在HotSpot VM中执行。
  • 线程阻塞:线程因为某种原因(获取锁、等待条件、休眠、执行阻塞式I/O)
    使用工具转储栈追踪信息后,可以看到这些线程状态信息(HotSpot内部C++对象OSThread维护):
  • MONTOR_WAIT:线程正在等待获取竞争的监视锁
  • CONDVAR_WAIT:线程正在等待HotSpot VM使用的内部条件变量(没有和任何Java对象关联)
  • OBJECT_WAIT:Java线程正在执行java.lang.Object.wait()。

VM内部线程

Java仅仅是一个“Hello World”程序执行时也会产生大量的线程,这些线程是由VM内部线程和VM库线程产生。VM内部线程(C++内部JavaThread的实例)如下:

  • VM线程:是C++单例对象,负责执行VM操作。
  • 周期任务线程:是C++单例对象,也称为WatcherThread,模拟计时器中断使得在HotSpot VM内可以执行周期性操作。
  • 垃圾收集线程:支持串行、并行和并发垃圾收集
  • JIT编译器线程:这些线程进行运行时编译,将字节码编译成机器码。
  • 信号分发线程:这个线程等待进程发来信号并将他们分发给Java的信号处理办法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值