当前位置: 首页 > news >正文

线程的生命周期在线剖析

1.NEW(新建)--->RUNNABLE(就绪、运行)

Java层:创建Thread对象,此时是普通的Java对象没有于操作系统底层线程关联。

JVM层:调用start方法时,JVM创建javaThread对象调用pthread_create创建OS线程

OS层:分配线程控制块,线程栈等资源,线程进入就绪队列

关键点:start方法的调用涉及到Java对象和OS线程两次创建,这也是为什么线程创建成本高的原因。

2.RUNNABLE的内部duality(二象性)

核心:包含了两种OS状态。

1.Ready(就绪):线程已准备,等待OS分配CPU时间片。

2.Running(运行):获得CPU时间片,执行run方法代码。

JVM视角:

JVM维护一个可运行线程队列,OS调度器从这个队列选择线程分配CPU,对于JVM来说,无论时等待还是运行,都是“可运行的”。

性能影响:RUNNABLE--->READY(时间片用完)会发生上下文切换。

3.BLOCKED(阻塞)监视器锁的竞争---->从未持有锁

线程尝试获取被其他线程持有的监视器锁时导致进入BLOCKED状态。重要区别:只有synchronized会导致线程进入BLOCKED状态,Lock接口的锁不会。

每个Java对象都关联一个监视器锁(Monitor),JVM维护一个该锁的入口集(Enrty Set),线程在 入口处竞争失败就会进入Entry Set,状态为BLOCKED,当持锁线程释放锁时,JVM从Entry Set中随机唤醒(自动唤醒)一个线程,此时涉及到非公平锁本质,唤醒的线程不比新来的线程有优先权,唤醒的线程还需同新线程竞争锁。

4.WAITING(超时等待)--->在锁内部等待,曾经持有锁但主动释放了

进入Wait Set等待集中,需要其他线程显示调用notify/notifyAll唤醒,否则无限期等待。

Object.wait()   //需要先持有锁   1.释放锁   2.进入等待集Wait Set   3.等待通知

LockSupport.park()  //JUC的等待基础

Thread.join()   //等待线程结束,底层也是wait()

过程:1.线程释放持有的监视器锁。2.线程被放入该对象的等待集。3.状态变为WAITING。4,其他线程调用notify/notifyAll时,从Wait Set移到Entry Set5.重新竞争。

5.TIMED_WAITING(超时等待)--->在锁内部等待,曾经持有锁但主动释放了

同上,但会在指定时间后自动唤醒。

6.TERMINATED(终止)

线程的run方法执行完毕或因异常退出,线程生命结束。

注意:此时的线程不可再次启动,会抛出illegalThreadStateException。

注意点:

wait方法必须在同步块中调用,否则抛出illegalMonitorStateException,sleep在任何地方都可以。

sleep方法不会释放锁,wait方法会主动释放锁。

不要使用stop停止线程会立即释放锁可能导致数据不一致,使用中断机制thread.interrupt()设置中断标志,线程run方法中通过isInterrupted或捕获InterruptedException来安全的结束任务。

http://www.dtcms.com/a/446885.html

相关文章:

  • [C++ 高并发内存池] 内存管理基础与问题分析
  • 自己的做网站单页 wordpress
  • 今天上海最新事件百度小程序优化合作公司
  • 《嵌入式驱动(六):pinctrl子系统和gpio子系统驱动》
  • 怎么建立一个网站让百度搜到北京病例最新消息今天
  • 六安网站建设培训成品网站能用吗
  • 简道云系统开发(八)国内主流的CRM系统优劣势分析
  • 杭州英文网站建设优秀作文网站推荐
  • 福州网站建设哪个好怎么做网站的搜索功能
  • 【算法】树上启发式合并 (CCPC2020长春 F. Strange Memory)
  • C#程序代码
  • 电商网站如何做引流广点通广告投放平台登录
  • 《API网关在企业研发协作平台中的深度定制与流程化效能重构》
  • 宁波网站排名优化seo小型网站建设价格低
  • 加强协会网站建设意义新乡百度网站优化排名
  • 企业网站优化做什么杭州网站建设前三
  • 蓝星旋钮旋转跳动大异常解决办法
  • 经营网站需要什么资质下载app软件到手机
  • 松江建设网站公司oss cdn wordpress
  • 做视频网站代码精品应用下载安装
  • 门户网站建设公司市场如何编写网站开发文档
  • Android 配置多个 cmake
  • 阿里云企业建站教程wordpress 明月浩空
  • AI智能体赋能文化传承与创新领域:社群身份认同的数字空间重构与文化融合策略
  • c 网站开发实例教学游戏网站建设系统介绍
  • 唐山建设信息网站国内网站
  • 解决leetcode第3704题统计和为N的无零数对
  • 全网通官方网站wordpress会员积分邀请
  • 吉林省高等级公路建设局死人网站网站qq登录原理
  • 网站专题页设计it运维平台