讣 告
襄垣县委书记翟卫华同志于2022年11月1日去世。翟卫华同志7月16日因遭遇车祸,伤势严重,住院治疗。治疗期间发现其患有抑郁症,经医院专家会诊并邀请省级心理咨询专家进行了多次心理疏导,仍未好转,于当日下午5时左右坠楼,不幸去世,终年53岁。
中共襄垣县委办公室
2022年11月1日
来源:襄垣县人民政府
流程编辑:TF029
举报/反馈
11月1日晚间,山西襄垣县委办公室发布讣告称,襄垣县委书记翟卫华同志于2022年11月1日去世。翟卫华同志7月16日因遭遇车祸,伤势严重,住院治疗。治疗期间发现其患有抑郁症,经医院专家会诊并邀请省级心理咨询专家进行了多次心理疏导,仍未好转,于当日下午5时左右坠楼,不幸去世,终年53岁。
另据襄垣县融媒体中心消息,7月15日,山西省长治市委副书记、市长陈耳东深入襄垣县实地检查指导防汛工作时,市县领导桑利刚、翟卫华、王威、牛艺儒参加。这也是公开报道中,翟卫华的最后一次露面。
7月15日,翟卫华(右二)最后一次公开露面。
另外,就在翟卫华遭遇车祸10天前的7月6日,全县干部大会召开,宣布省委、市委关于襄垣县委主要领导同志职务调整的决定。山西省委、市委研究决定:翟卫华同志任襄垣县委委员、常委、书记。
个人简介:
翟卫华,女,汉族,1969年1月出生,山西省长治市上党区人,中央党校研究生学历,农业推广硕士,农业经济师,1991年6月加入中国共产党,1992年8月参加工作。
1988年09月——1992年07月,山西农业大学学习;
1992年08月——1997年08月,长治市农业区划办公室科员;
1997年08月——1998年08月,长治市委农村工作领导小组办公室科员;
1998年08月——1999年08月,长治市委农村工作领导小组办公室副主任科员;
1999年08月——2002年03月,长治市委"三讲"办、市委组织部工作;
2002年03月——2003年11月,长治市农业局发展计划科科长;
2003年11月——2006年05月,长子县副县长;
2006年05月——2011年04月,长子县委常委、常务副县长;
2011年04月——2016年08月,屯留县委常委、常务副县长;
2016年08月——2018年11月,屯留县委副书记、县长;
2018年11月——2021年02月,长治市屯留区委副书记、区长;
2021年02月——长治市屯留区委书记。
2022年07月——山西省长治市襄垣县委书记。
举报/反馈
据中共襄垣县委办公室发布讣告,襄垣县委书记翟卫华同志于2022年11月1日不幸去世,终年53岁。
翟卫华同志于今年7月16日因遭遇车祸,伤势严重,住院治疗。治疗期间发现其患有抑郁症,经医院专家会诊并邀请省级心理咨询专家进行了多次心理疏导,仍未好转,于11月1日下午5时左右坠楼,不幸去世。
据公开资料显示,翟卫华,女,汉族,山西省长治市上党区人,中央党校研究生学历,农业推广硕士,农业经济师,1991年6月加入中国共产党,1992年8月参加工作。
今年7月,襄垣县全县干部大会召开,宣布省委、市委关于襄垣县委主要领导同志职务调整的决定。省委、市委研究决定:翟卫华同志任襄垣县委委员、常委、书记。市委常委、组织部长杨保春出席会议并讲话,新任县委书记翟卫华讲话,县委副书记、县长李瑜主持会议。
翟卫华在讲话中说,我坚决拥护、完全服从省委、市委的决定。在今后的工作中,我将尽心尽力做工作、尽职尽责担使命,以实干牢记重托、以实效回报信任,奋力谱写全方位推动襄垣高质量发展的崭新篇章。
(长治新闻网、晨报长治)
编辑:赵珊珊
举报/反馈
据山西省长治市襄垣县政府官网消息,11月1日,中共襄垣县委办公室发布讣告:
襄垣县委书记翟卫华同志于2022年11月1日去世。翟卫华同志7月16日因遭遇车祸,伤势严重,住院治疗。治疗期间发现其患有抑郁症,经医院专家会诊并邀请省级心理咨询专家进行了多次心理疏导,仍未好转,于当日下午5时左右坠楼,不幸去世,终年53岁。
图:2022年7月11日,襄垣县安全生产工作会议召开,翟卫华讲话(来源:襄垣县广播电视台画面)
公开履历显示,翟卫华出生于1969年,一直在山西省工作。此前曾任:长子县副县长,长子县委常委、常务副县长,屯留县委常委、常务副县长,屯留区区长,屯留区委书记等职。
今年7月6日,也就是翟卫华遭遇车祸10天前,襄垣县干部大会召开,宣布山西省委、长治市委决定:翟卫华同志任襄垣县委委员、常委、书记。
会上,翟卫华现场表态:我坚决拥护、完全服从省委、市委的决定。在今后的工作中,我将尽心尽力做工作、尽职尽责担使命,以实干牢记重托、以实效回报信任,奋力谱写全方位推动襄垣高质量发展的崭新篇章。
一要旗帜鲜明讲政治,坚决捍卫“两个确立”。坚持把学懂弄通做实习近平新时代中国特色社会主义思想作为首要政治任务,把忠诚拥护“两个确立”、坚决做到“两个维护”作为最高政治原则和根本政治规矩,不断提高政治判断力、政治领悟力、政治执行力,自觉做到对襄垣的高质量发展负责、对襄垣的社会稳定负责,确保中央和省委、市委各项决策部署在襄垣落地生根、开花结果。
二要履职担当谋发展,坚决把牢主题主线。我将始终牢记习近平总书记“在转型发展上率先蹚出一条新路来”的殷殷嘱托,按照省委、市委部署要求,坚持把发展作为第一要务、实干作为第一导向、担当作为第一使命,立足新发展阶段,贯彻新发展理念,抢抓新发展机遇,统筹疫情防控和经济社会发展,聚焦优势谋长远、一张蓝图绘到底、一任接着一任干,全力做好六稳六保,奋力推动各个领域、各项工作争先进位,努力使襄垣在高质量发展的道路上阔步前行,平稳致远。
三要矢志不渝惠民生,坚决当好人民公仆。牢固树立以人民为中心的发展思想,大力践行一线工作法,问政于民、问需于民、问计于民,紧紧围绕群众在就业、教育、医疗、住房等民生方面的关切和期盼,一件接着一件办、一年接着一年干,努力用干部工作的辛苦指数、绩效指数换取群众的幸福指数和满意指数,把经济总量、财政增量转化为老百姓实实在在的生活质量,不断提升人民群众获得感、幸福感和安全感。
四要凝聚合力重协作,坚决做到团结干事。充分发挥县委统揽全局、协调各方的领导作用,抓好班子、带好队伍,落实民主集中制,做到科学决策、民主决策、依法决策。大力弘扬求真务实精神,牢固树立能者上、优者奖、庸者下、劣者汰的正确用人导向,激励广大干部在高质量发展的伟大实践中冲锋在前、建功立业。坚持依靠群众、尊重实践,充分调动一切积极因素,心往一处想、劲往一处使、智往一处谋,最大程度凝聚起众志成城、共谋发展的强大合力。
五要清正廉洁作表率,坚决保持清廉本色。认真履行全面从严治党主体责任,严格落实中央八项规定精神要求,持之以恒正风肃纪,带头执行党风廉政建设各项规定,知敬畏、存戒惧、守底线,自觉接受各方面监督,全面建设清廉襄垣,努力营造风清气正的良好政治生态,奋笔绘就襄垣高质量发展新画卷,为全市加快建设全国资源型城市转型升级示范区、现代化太行山水名城贡献更多襄垣力量。
资料来源:襄垣县政府官网等
举报/反馈
人生在世,不可能所有的事情都顺心如意,即便是再成功的人士,也会有自己的苦恼,面对着生活中的困难与不顺,我们要乐观对待,妥善处理,不管到了什么时候,都不要有轻生的念头,因为只有活着才能改变现状,寻死是最不可取的行为。2022年11月1日,山西就发生了令人痛心的一幕。
据山西襄垣县委办公室发布的讣告,2022年11月1日,该县的县委书记翟卫华于当天下午5点左右坠楼,不幸身亡,年仅53岁。据了解:2022年7月16日,翟卫华曾因车祸致严重受伤,后入院治疗,在治疗期间,发现她患有抑郁症,虽然医院邀请专家对其进行多次心理疏导,但情况始终没有好转,想不到她竟然会以这样一种方式离开这个世界。
如今悲剧已经酿成,即便说得再多也已于事无补,愿逝者安息,也希望每个人在生活中都能有乐观的心态,千万不要做傻事。最后,不知大家对此作何感想?
举报/反馈
生命只有一次,对于每个人来说都是最为宝贵的,在我们短暂的一生当中,总会遇到各种不如意的事情,我们一定要保持一种乐观的心态,积极去面对,再大的困难总会有过去的一天,切记一点,千万不要轻言放弃自己的生命,这是最不可取的行为。11月1日,山西就发生了一起悲剧。
据媒体爆料称:2022年11月1日,山西省长治市襄垣县县委书记翟卫华于当天下午去世,年仅53岁。据消息显示:翟卫华是坠楼身亡,在3个月前(2022年7月16日),翟卫华曾发生了一起车祸,受伤严重,后被送往医院进行救治,在这个期间,医生发现她患有抑郁症,多次邀请专家对其展开心理疏导,可让人没想到的是,仅仅几个月之后,她竟然会坠楼身亡,结束了自己年仅53岁的生命。
客观上来讲,人生在世,没有谁是一帆风顺的,就算是成功人士也有自己的苦恼,希望每个人都能够好好珍惜自己的生命,过好当下才是最重要的,因为只有活着才能改变自己的现状。最后,不知大家对此作何感想?
举报/反馈
山西一县委书记坠楼(曾患抑郁症),真的让人唏嘘,感到惊讶的同时,我们一定要了解什么是抑郁症,因为大家都感觉到很熟悉又陌生, 因为这个抑郁症,隐藏较深,很难自我发现。#抑郁症#
而在发病的时候, 亲身经历的人才可以感受到,这个疾病的危险性, 而对于健康的人,都是无法理解和感受的。
第一:那么抑郁症到底体现在哪些方面呢?
首先我们要理解, 抑郁症是一种心理的障碍,在这种障碍的作用下, 会持续地让人感觉到非常的伤心,忧郁, 比如对任何事情都感觉到悲观。
从而直接和间接地体现在,患病的思维,语言,和行为,严重的患者甚至影响到正常的生活,最后危及生命,
生活中, 经常听到很多人,因为一件很小的事情,引发很大的暴怒, 烦躁,甚至是沮丧, 比如,中学生,学习压力巨大, 日常生活中, 一直对自己严格要求, 而且时刻提醒自己, 一定要努力读书,争取考个好成绩,
但往往有些时候, 一次不经意的落选, 或者是一次成绩考得十分差,就会大发雷霆, 甚至撕咬卷子,心里面,默默地责怪自己, 还是没有全力以赴, 或者是说自己真的太笨了。
各种负能量的情绪,会在第一时间涌向心疼, 让人感觉到无望,失落,失去动力, 其实这个时候, 我们就要,引起相当大的注意,及时地调整好自己的心理特征, 或者是跟老师, 同学, 家长述说,
因为很多抑郁症的人群, 都是很多悲观的想法, 很多无意义的自责,都是对抑郁症埋下祸根。随着时间的推移, 人就会变得十分的内向,嗜睡,做什么事情都没有动力,
在后续病情演变的过程中, 人就会变得,焦虑烦躁,食欲不振, 暴饮暴食, 体重增加,
记忆力减退, 思维反应就会变得迟缓, 尤其是内心会变得疑神疑鬼,注意力不集中, 对自己毫无价值认同, 做什么事情, 感觉就是无用功,
经常反复地做一件事情,无法集中精力,随着病情的严重, 就会经常会想到死亡, 甚至反反复复地思考 如何自杀,和死亡, 尤其是身体有问题后, 无法自我说出哪里疼痛,
精神到了最为脆弱的时刻, 人就会走向极端,
第二:如何避免成年人患上抑郁症?
一般来说,现在的职场工作压力巨大,工作强度比较大, 节奏比较快,还有同事之间的相处,钩心斗角, 再加上家庭小孩的综合压力, 让人心力憔悴。
而这些心理的压力,会影响到你的睡眠,思维和语言,这种恶性循环是非常可怕的,因此,碰到以上问题, 我们一定要有退一步海阔天空的胸怀, 做错了事情,或者是压力巨大的时候。
一定要找朋友, 家人, 同时,进行倾述。如果自我感觉到, 已经无法排解, 一定要及时地去专业的医院, 预约专业的心理医生, 进行治疗。
当然在现实生活中, 除了成年人之外, 还有未成年人的小孩, 毕竟现在学业繁重, 家中也要及时发现, 及时沟通, 从而有效地改善小孩子的内心忧虑。
最后就是我们的老年人, 其实老年人最为可怜, 晚年孤独,生活无法自理,无社交圈, 各种慢性病的折磨, 就会促使老人内心的变化和演变。你们觉得呢?
举报/反馈
来源:券商中国
作者:杨喻程/整理
疫情最新进展
国家卫健委:昨日新增本土确诊病例409例,新增本土无症状感染者2346例
1日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例465例。其中境外输入病例56例;本土病例409例(广东125例,河南64例,福建39例,新疆30例,北京28例,山西24例,内蒙古24例,重庆13例,黑龙江12例,湖南10例,江苏8例,陕西8例,青海8例,山东4例,四川4例,云南3例,辽宁2例,上海1例,湖北1例,宁夏1例),含69例由无症状感染者转为确诊病例(福建32例,广东19例,重庆7例,北京4例,黑龙江2例,云南2例,陕西2例,四川1例)。无新增死亡病例。无新增疑似病例。
31个省(自治区、直辖市)和新疆生产建设兵团报告新增无症状感染者2463例,其中境外输入117例,本土2346例(新疆400例,广东298例,内蒙古296例,河南295例,黑龙江187例,湖南135例,山西112例,山东93例,福建85例,青海83例,河北68例,湖北64例,甘肃58例,四川33例,云南29例,陕西29例,辽宁25例,天津17例,江苏11例,安徽5例,广西5例,西藏5例,北京4例,浙江4例,重庆3例,吉林1例,宁夏1例)。
关于猴痘疫情,世卫组织再发声
据央视,针对10月20日举行的关于猴痘疫情的突发事件委员会第三次会议,世卫组织当地时间11月1日发布声明指出,猴痘疫情继续构成“国际关注的突发公共卫生事件”。
世卫组织于2022年7月23日宣布猴痘疫情构成“国际关注的突发公共卫生事件”,之后许多国家通过采取一系列公共卫生干预措施迅速应对疫情,全球新增病例数正在下降,但一些国家的新增病例数仍在增加。
郑州富士康部分厂区发布返乡人员奖金新政
富士康科技集团iDPBG人力资源管理总处发布了返乡离职员工入职奖金及小时差价发放政策说明。该说明指出,考量疫情为不可抗力因素,公司本着人文关怀精神,针对奖金及差价未达到合同约定发放条件的员工,将依据其实际出勤状况进行发放。此次政策适用对象为返乡离职员工且2022年10月31日在职人员,办理时间为11月1日至11月3日。其中,入职奖励金原本发放政策为有效出勤≥55天且在职90天,发放需在职;调整后政策为在职天数/90*约定入职奖励金。入职奖励金及小时差价统一于2022年11月28日发放。
宏观动态
央行公开市场净回笼2620亿元
央行今日进行180亿元7天期逆回购操作,中标利率为2.00%,与此前持平。今日有2800亿元7天期逆回购到期,实现净回笼2620亿元。
易纲:房地产销售和贷款投放已有边际改善,相信房地产市场能保持平稳健康发展
央行行长易纲今日上午在香港金融管理局“国际金融领袖投资峰会”上表示,房地产行业关联很多上下游行业。房地产市场区域特征明显且差异很大,各城市政府在稳定当地房地产市场中发挥着重要作用。人民银行积极支持房地产行业健康发展,降低了个人住房贷款利率和首付比例,鼓励银行通过“保交楼”专项借款支持已售住房建设交付,支持刚性和改善性住房需求。近期,房地产销售和贷款投放已有边际改善。随着中国城镇化进程不断推进,我们相信房地产市场能保持平稳健康发展。
易纲:人民币汇率将继续在合理均衡水平上保持基本稳定,人民币币值和购买力将保持稳定
央行行长易纲今日上午在香港金融管理局“国际金融领袖投资峰会”上表示,今年以来,得益于中国经济长期向好的基本面,以及我们近年来坚持实施常态化货币政策,人民币对一篮子货币相对稳定,对美元有所贬值,但对其他主要货币有所升值。未来,我们将坚持市场在汇率形成中的决定性作用。人民币汇率将继续在合理均衡水平上保持基本稳定,人民币币值和购买力将保持稳定。
两部门就开展智能网联汽车准入和上路通行试点公开征求意见
工信部会同公安部组织起草《关于开展智能网联汽车准入和上路通行试点工作的通知(征求意见稿)》,现公开征求社会各界意见。试点内容:在全国智能网联汽车道路测试与示范应用工作基础上,工业和信息化部、公安部遴选符合条件的道路机动车辆生产企业和具备量产条件的搭载自动驾驶功能的智能网联汽车产品,开展准入试点;对通过准入试点的智能网联汽车产品,在试点城市的限定公共道路区域内开展上路通行试点。本通知中智能网联汽车搭载的自动驾驶功能是指国家标准《汽车驾驶自动化分级》(GB/T 40429-2021)定义的3级驾驶自动化(有条件自动驾驶)和4级驾驶自动化(高度自动驾驶)功能。
中国核学会理事长:预计未来五年我国将保持每年6至8台核电机组的核准开工节奏, 核能发电量也将大幅增加
据科技日报,中国核学会理事长王寿君在1日举行的第23届太平洋地区核能大会上介绍,截至2022年6月,我国在运核电机组53台,在建核电机组23台,在建核电机组数为全球第一。今年已核准10台核电机组。预计未来五年,我国将进一步加快扩大装机规模,保持每年6至8台核电机组的核准开工节奏,核能发电量也将大幅增加。预计到2035年,我国核电在总发电量中的占比将达到10%左右。
台风黄色预警:“尼格”或于明天登陆广东,局地将有大暴雨
中央气象台11月2日06时继续发布台风黄色预警。预计,“尼格”将以每小时15公里左右的速度向西北方向移动,强度逐渐减弱,并将于3日早晨到上午在广东珠海到阳江一带沿海登陆(热带低压或热带风暴级,7~8级,15~18米/秒),尚不排除3日白天在广东西部近海海面减弱消散的可能。11月2日08时至3日08时,广东珠江口附近及其东侧沿海、台湾岛东北部的部分地区将有大到暴雨,其中珠江口东侧沿海有大暴雨(100~120毫米)。
天文学家发现对地球具有潜在威胁的最大天体:直径1.5公里
据财联社,一个国际团队使用智利托洛洛山美洲天文台Víctor M.Blanco 4米望远镜上安装的暗能量相机(DECam),发现了3颗隐藏在太阳强光中的近地小行星(NEA),其中一颗是过去8年来发现的对地球具有潜在威胁的最大天体。相关论文近日发表于《天文学杂志》。利用黄昏时短暂而有利的观测条件,天文学家发现了这组近地天体。其中一颗为直径1.5公里的小行星名为2022 AP7,其轨道有朝一日可能会进入地球轨道。另外两颗小行星分别为2021 LJ4和2021 PH27,它们的轨道安全地保持在地球轨道内部。
加拿大央行行长麦克勒姆称:预计政策利率需要进一步提高
加拿大央行行长麦克勒姆称,预计政策利率需要进一步提高,利率要升多高将取决于货币政策效果、解决供应侧挑战、及通胀对本轮紧缩周期的反应情况;尚未预见物价压力整体性下滑,恢复物价稳定没有捷径;紧缩期将会告一段落,正在逐渐接近但尚未到达。
山西一县委书记坠楼去世,曾确诊抑郁
山西襄垣县委办公室11月1日晚间发布讣告:襄垣县委书记翟卫华同志于2022年11月1日去世。翟卫华同志7月16日因遭遇车祸,伤势严重,住院治疗。治疗期间发现其患有抑郁症,经医院专家会诊并邀请省级心理咨询专家进行了多次心理疏导,仍未好转,于当日下午5时左右坠楼,不幸去世,终年53岁。
兰州七里河警方通报儿童死亡事件
11月1日,兰州公安七里河分局官方微博发布通报:
11月1日13时43分,兰州市公安局接群众求助警情,称有2人在七里河区上西园家中昏倒,其中1名儿童已无呼吸。接警后,分局即派警到场处置,协助群众于13时57分将2人送往医院救治。其中儿童抢救无效死亡,1人在医院接受治疗,生命体征平稳。经走访调查、现场勘查及死者血液检验鉴定,为使用液化气灶不当,造成一氧化碳中毒死亡。
金融机构
中信证券:看好虚拟现实行业的长期机遇,建议关注整机、关键零部件等优质企业
中信证券研报指出,工信部等五部门11月1日联合印发《虚拟现实与行业应用融合发展行动计划(2022-2026年)》,明确提出到2026年,我国虚拟现实产业总体规模超过3500亿元,虚拟现实终端销量超过2500万台的整体目标。我们认为,自上而下的政策支持,有望为国内虚拟现实行业奠定发展基础,明确的销量目标亦有望持续推进行业繁荣。我们看好虚拟现实行业的长期机遇,建议关注整机、关键零部件、内容端的优质企业。
市场数据
两市融资余额增加36.19亿元
截至11月1日,上交所融资余额报7696.68亿元,较前一交易日增加9.31亿元;深交所融资余额报6767.68亿元,较前一交易日增加26.88亿元;两市合计14464.36亿元,较前一交易日增加36.19亿元。
美股三大指数高开低走集体收跌,大型科技股多数下跌
美股三大指数高开低走集体收跌,纳指跌0.89%,标普500指数跌0.41%,道指跌0.25%。流媒体、互联网内容与信息板块跌幅居前,Zedge跌超5%,FubolTV跌超2%。大型科技股多数下跌,亚马逊跌超5%,谷歌跌超4%,苹果、微软跌超1%。有色金属板块涨幅居前,南方铜业、巴西国民钢铁公司涨超6%,美国铝业公司涨超4%。
公司动态
宁德时代:目前不了解田惠宇个人与招银国际对公司投资主体之间是否有交易关系的具体细节情况
宁德时代在互动平台表示,招银国际曾作为机构投资人之一参与了宁德时代在上市前的两轮市场化股权融资。在招银国际参与宁德时代投资的整个过程中由其专业投资团队负责,招银投资主体对本公司陈述的资金来源均为招银自有及其管理资管资金,从未提及田惠宇个人是否有通过招银国际控制的投资主体间接参与了对宁德时代的投资,宁德时代及其管理层在田惠宇案件调查之前对此信息毫不知情也毫无关联,目前也不了解田惠宇个人与招银国际对本公司投资主体之间是否有交易关系的具体细节情况。
数字货币交易所Bitmex已裁员30%
据The Block,加密交易所Bitmex已经裁掉30%的员工,这是该交易所从“超越衍生品”战略转向的一部分,该战略包括推进现货交易、经纪和托管服务。此次裁员发生在该公司首席执行官Alexander Hptner离职一周后。
强生同意以166亿美元收购心脏设备制造商Abiomed
据《华尔街日报》报道,强生同意以166亿美元收购心脏设备制造商Abiomed。根据协议条款,强生同意先支付每股380美元,如果达到某些里程碑,还将额外支付每股35美元。报道称,强生计划明年将其销售泰诺(Tylenol)和邦迪(Band-Aids)的消费产品部门分拆为一家独立的公司。此举将使强生更加集中于其余两个部门——制药和医疗设备。
多家上市公司回应供销社相关业务情况
据证券时报,近日,A股市场供销社概念持续走强,多家上市公司回应相关业务情况。雪人股份表示,已为部分省市供销合作社的冷链物流项目提供产品与服务,正在与各地区供销社进一步探讨冷链物流基础设施建设方面的合作;武商集团表示,公司深化拓展“国企联村”行动,探索助农增收的有效路径,助力实现乡村振兴;辉隆股份表示,公司是具有“为农、务农、姓农”本质属性的供销社企业,位列中国农资流通企业综合竞争力百强第4位;张家港行表示,大力加强与各村级集体组织的合作、持续深耕普惠金融,多措并举推进支农支小业务发展。
举报/反馈
大家好,我是王有志。
原计划是今天结束线程的部分,但是写完后才发现,光Thread类的核心方法分析就写了5000多字了,所以不得不再拆出来一篇。
在02.关于线程你必须知道的8个问题(上)我们一起学习了如何创建线程,以及Java中线程状态,那么今天就来学习Thread类的核心方法。
Tips:
Java及JVM源码基于Java 11JVM源码仅展示关键内容,另附Open JDK链接文末附Java方法使用Demo的Gitee地址
Thread.start和Thread.run
上一篇中我们已经知道,Thread.run实际上是来自Runnable接口,直接调用并不会启动新线程,只会在主线程中运行。
Thread.start方法中调用的Thread.start0方法是真正承载了创建线程,调用Thread.run方法的能力。
其实到这里已经回答了它们之间的区别,接下来我们一起来看底层是如何实现的。
Tips:有面向对象编程语言基础的,看懂JVM源码对你来说并不困难。
首先是thread.c文件,该文件为Java中Thread类注册了native方法。
Tips:native方法是Java Native Interface,简称JNI。
第一眼就可以看到start0对应的JVM方法JVM_StartThread,实现是在jvm.cpp中:
接着来看new JavaThread做了什么,在thread.cpp中:
os::create_thread创建了操作系统层面的线程。这和上一篇中得到的结论是一致的,Java中的Thread.start0完成了操作系统层面线程的创建和启动。
个人认为Thread.run和Thread.start是没什么可比性的。如果被问到这个问题,要么是面试官懒,网上随便找找就来问,要么是技术水平确实一般。
Tips:
Thread::start方法在thread.cpp中os::create_thread方法在os_linux.cpp中,注意操作系统的区别os::pd_start_thread方法在os_linux.cpp中,注意操作系统的区别os::start_thread方法在os.cpp中
Thread.sleep和Object.wait
接下来看两个可以放在一起比较的方法:
Object.waitThread.sleep
很明显的区别是,它们并不在同一个类中定义,其次方法名上也能看出些许差别,“等待”和“睡眠”。
Object.wait
Java在Object类中,提供了2个wait方法的重载,不过最终都是调用JNI方法:
方法声明中我们能得知该方法的作用--使线程暂停指定的时间。
接着我们来看Object.wait的方法注释:
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
使当前线程阻塞,直到主动唤醒或者超过指定时间。清晰的说明了Object.wait的功能,另外也提示了如何唤醒线程:
Object.notifyObject.notifyAll
有了之前的经验,很容易想到Object.wait方法是在Object.c中注册的。我们找到它在jvm.cpp中的实现:
接着是ObjectSynchronizer::wait,在synchronizer.cpp中:
获取ObjectMonitor对象时,调用了ObjectSynchronizer::inflate方法,inflate翻译过来是膨胀的意思,是锁膨胀的过程。实际上,在未展示的代码中,还有偏向锁的过程,不过这些不是这部分的重点。
然后调用ObjectMonitor.wait,这个方法有225行,只看想要的部分:
答案已经呼之欲出了,ObjectMonitor.wait中退出了监视器,在Java层面就是Object.wait方法会释放监视器锁。
对不同等待时间的处理也需要关注一下,millis <= 0的情况下,执行的是Self->_ParkEvent->park(),除非主动唤醒,否则线程永远停在这里。在Java层面看,执行object.wait(0)会使当前线程永久阻塞。
既然都到这了,就多说一句,ObjectMonitor.exit中有几行关键代码,是synchronized特性实现的关键:
这些内容我们提前混个眼熟,后面在synchronized中详细解释。
我们来思考两个问题:
为什么Object.wait必须要在synchronized中调用?为什么wait方法设计在Object类中,而不是Thread类中?
首先,我们已经知道Object.wait的底层实现中,要释放监视器锁,释放的前提是什么?要先拥有监视器锁。那么在synchronized中调用Object.wait就很容易理解了。
其次,锁住的是什么?是对象,从来都不是执行线程(Thread实例是线程对象,不是执行线程)。因此涉及到监视器锁操作的方法是不是放到Object中更合适呢?
最后,如果你仔细阅读过Object.wait所有重载方法注释的话,你会发现一个词:spurious wakeup(虚假唤醒)。
这是没有主动notify/notifyAll,或者被动中断,超时的情况下就唤醒处于WAITING状态的线程。因此Java也建议你在循环中调用Object.wait:
简单解释下虚假唤醒产生的原因,我们已经知道Object.wait最终是通过Self->_ParkEvent->park()或Self->_ParkEvent->park(millis)实现线程暂停的,其调用的park方法位于os_posix.cpp中:
pthread_cond_wait和pthread_cond_timedwait是Linux对POSIX的实现,知道其作用即可,就不继续深入了。
我们很容易联想到,Object.notify的底层实现是调用os::PlatformEvent::unpark方法完成的。不出所料,从Object.c到ObjectMonitor.cpp,最后会发现该方法包含在os_posix.cpp中:
同样的,pthread_cond_signal也是Linux对POSIX的实现。Linux man page中对其的解释是:
The pthread_cond_broadcast() function shall unblock all threads currently blocked on the specified condition variable cond.The pthread_cond_signal_() function shall unblock at least one of the threads that are blocked on the specified condition variable cond (if any threads are blocked on cond).
其中第二段是关键,即pthread_cond_signal会唤醒至少一个阻塞在指定条件上的线程。也就是说,调用Object.notify可能会唤醒不止一个符合条件的线程。
Java层面有一个经典的例子--生产者消费者,只贴出产品部分的代码(全量请查看Gitee):
如果有1个生产者,多个消费者,消费者判定产品数量为0后,全部进入等待,生产者生产后,通知消费者消费,此时多个消费者被唤醒,直接进行消费,造成产品的总量为负数的情况。
改进的方法也很简单:
判断方式由if修改为while,不断地检查条件notify修改为notifyAll,避免死锁产生
Thread.sleep
首先是方法声明:
通过字面意思可以看出,让线程“睡眠”指定时间。再来看注释提供了哪些信息:
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds plus the specified number of nanoseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.
最后一句非常重要,The thread does not lose ownership of any monitors意思是,使线程进入休眠,但不会丢失任何监视器锁的所有权。通俗点来说就是,我可以不用,但我不能没有。
Thread.sleep依旧是JNI方法,直接看JVM实现,在jvm.cpp中:
判断休眠时间millis,如果millis == 0,调用os::naked_yield(),源码在os_linux.cpp中,该方法会让出CPU时间。真是“大公无私”啊,但是唤醒是由操作系统决定。
Tips:Java 11对millis == 0的逻辑做了修改,可以查看Java 8的逻辑,我有点忘了。
也就是说,执行thread.sleep(0)并不是“咻”的一下什么都不做就结束了,而是真正的让出了CPU时间。
接着是else的部分,最关键的是os::sleep(thread, millis, true) ,调用操作系统sleep方法进入休眠,以对Linux的封装os_posix.cpp中的实现为例:
简化后就很好理解了,计算millis剩余时间,millis > 0调用park暂停线程,唤醒后继续循环,millis <= 0则表示休眠结束。
到这里Thread.sleep的内容也算告一段落了,分析的过程中没有发现涉及到ObjectMontior的地方,因此断定Thread.sleep并不会释放监视器锁的所有权。
Thread.yield和LockSupport.park
趁热打铁,来看同样拥有“暂停”能力的两个方法:
Thread.yieldLockSupport.park
Thread.yield
首先是方法声明:
还是熟悉的JNI方法。同样从注释开始:
A hint to the scheduler that the current thread is willing to yield its current use of a processor. The scheduler is free to ignore this hint.
这句话很好理解,提示调度器当前线程可以放弃处理器时间,但是调度器可以忽略。
直接来看JVM实现:
是不是很熟悉?和我们在Thread.sleep中看到millis == 0的场景不能说相似吧,简直是一模一样。
强调一下,Thread.yield只是暂时让出CPU时间,并不是不再执行,也没有释放监视器锁。
LockSupport.park
LockSupport.park常常会和Thread.sleep,Thread.yield以及Object.wait一起比较,趁这次一起说完。
从Java源码入手:
好家伙!!!LockSupport啥也不干,直接使用大名鼎鼎的Unsafe,那么直接分析Unsafe.park。
在此之前,还是要先看注释:
Disables the current thread for thread scheduling purposes unless the permit is available.
翻译过来就是,未获得许可的情况下,一直暂停线程。从表象上看和Object.wait很相似,但是别忘了Object.wait会释放监视器锁。
Unsafe.park
依旧是方法声明:
Tips:@HotSpotIntrinsicCandidate是Java 9中引入的,表示方法在HotSpot虚拟机中有高效的实现。
Unsfae.java的方法是直接在unsafe.cpp中注册的,实现也在unsafe.cpp中:
需要注意,Thread.sleep中使用的是os::PlatformEvent::park,这里调用的是Parker::park,在os_posix.cpp中:
Parker::park提供了两种场景,暂停指定时间依赖于pthread_cond_timedwait实现,对应LockSupport.parkNanos,不限时暂停依赖于pthread_cond_wait实现,对应LockSupport.park。
从源码来看,Thread.sleep中使用的os::PlatformEvent::park是简化版的Parker::park。另外,我们也可以得到一个隐藏结论:LockSupport.park并不会释放监视器锁。
Thread.join
先来看Java中关于join(long millis)的注释:
Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.
比较容易翻译,等待指定的时间,或调用线程运行结束。如果指定时间为0,则会永远等待。
看起来又是关于线程“暂停”的方法了,我们来看源码:
逻辑很清晰,也没有调用太多JNI方法。看起来岁月静好,不过,我们先写一段测试代码:
现在我们提出两个问题:
谁在等待t1运行结束?什么时候唤醒的线程?
对于第一个问题,我们先来回顾下Object.wait的使用。ObjectMonitor::wait中调用os::PlatformEvent::park,操作的对象是当前执行线程,而不是调用对象。
Tips:这里有些绕,this.joinThread.join()的调用中,this.joinThread是线程对象,而不是执行线程,执行线程是Thread实例对象在操作系统层面的映射。
网上很多答案说,join方法阻塞的是主线程并不准确,个人理解在哪个线程中执行join方法(不是调用!!!),就阻塞哪个线程。举个例子:
这种情况下被阻塞的是线程实例对象t2在操作系统层面映射的执行线程。
接着我们来看第二个问题,在Thread.join的源码中,我们并没有看到notify/notifyAll方法,那么线程怎么被唤醒的呢?
这里直接给出答案,以上面的代码为例子,在线程t1执行结束时,JVM会唤醒等待的线程。也就是JVM层面执行JavaThread::exit时唤醒线程,源代码在thread.cpp中:
通过JVM的注释也能看出这个方法做了什么,不过我们还是一起来看ensure_join方法,在thread.cpp中:
代码最后一行,调用了notify_all唤醒了所有线程,也就是说,此刻所有调用Object.wait的方法都会被唤醒。另外也可以看到,线程状态被标记为TERMINATED也是在这个方法中完成的。
到此为止,Thread.join的原理也已经说完了,它的本质就是调用Object.wait实现阻塞,因此Java的注释中也会建议不要使用wait/notify/notifyAll:
It is recommended that applications not use wait, notify, or notifyAll on Thread instances.
Thread.interrupt
从关键代码开始:
如果没猜错的话,interrupt0依旧是JNI方法:
往下追之前,来看注释:
Interrupts this thread.
简明扼要,中断线程。
这时候相信你已经能够熟练的点开jvm.cpp了查看源码了:
跳过thread.cpp,直接来到os::is_interrupted方法,在os_posix.cpp中:
调用Thread.interrupt在JVM层面并没有立即停止线程,仅标记了中断状态,随后尝试唤醒处于sleep/wait/park的线程,真正的中断是从操作系统获取该线程的中断状态开始的。
结语
今天我们一起了解了Thread类中的6个方法,另外也学习了Object.wait,Object.notify,LockSupport.park和Unsafe.park,虽然没有提及Object.notifyAll,但它的原理和Object.notify完全一样,只不过多了一层循环。
最后我们再通过一张表格,来对比下线程“暂停”方法:
当然了,“暂停”的方式不仅仅有这些,还有一些会在JUC中涉及。
本篇文章代码仓库:Thread核心方法
好了,今天就到这里了,Bye~~
参考资料
Thread.run方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/classes/java/lang/Thread.java#l832
Thread.start方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/classes/java/lang/Thread.java#l7
Thread.start0方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/classes/java/lang/Thread.java#l8
thread.c:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/native/libjava/Thread.c#l44
jvm.cpp的JVM_StartThread方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/prims/jvm.cpp#l2859
thread.cpp的JavaThread构造方法:
https://hg.openjdk.java.net/jdk/jdk11/file/d2137bd1e57d/src/hotspot/share/runtime/thread.cpp#l1623
thread.cpp的start方法:
https://hg.openjdk.java.net/jdk/jdk11/file/d2137bd1e57d/src/hotspot/share/runtime/thread.cpp#l463
os_linux.cpp的create_thread方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/linux/os_linux.cpp#l715
os_linux.cpp的pd_start_thread方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/linux/os_linux.cpp#l879
os.cpp的start_thread方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/share/runtime/os.cpp#l857
Object.c的wait方法的注册:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/java.base/share/native/libjava/Object.c#l44
jvm.cpp的JVM_MonitorWait方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/prims/jvm.cpp#l602
synchronizer.cpp的wait方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/runtime/synchronizer.cpp#l479
ObjectMonitor.wait方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/runtime/objectMonitor.cpp#l1416
ObjectMonitor.exit方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/runtime/objectMonitor.cpp#l905
os_posix.cpp的unpark方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/posix/os_posix.cpp#l1928
Linux man page对pthread_cond_signal的解释:
https://linux.die.net/man/3/pthread_cond_signal
虚假唤醒示例:
https://gitee.com/wyz-A2/JavaInterview/blob/master/Concurrence/src/main/java/com/wyz/thread/core/SpuriousWakeupDemo.java
jvm.cpp的JVM_Sleep方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/prims/jvm.cpp#l3084
os_linux.cpp的naked_yield方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/linux/os_linux.cpp#l4132
os_posix.cpp的sleep方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/posix/os_posix.cpp#l562
unsafe.cpp的Unsafe_Park方法:
https://hg.openjdk.java.net/jdk/jdk11/file/83aec1d357d4/src/hotspot/share/prims/unsafe.cpp#l938
os_posix.cpp的Parker::park方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/posix/os_posix.cpp#l1988
thread.cpp的exit方法:
https://hg.openjdk.java.net/jdk/jdk11/file/d2137bd1e57d/src/hotspot/share/runtime/thread.cpp#l1782
thread.cpp的ensure_join方法:
https://hg.openjdk.java.net/jdk/jdk11/file/d2137bd1e57d/src/hotspot/share/runtime/thread.cpp#l1762
jvm.cpp的JVM_Interrupt方法:
https://hg.openjdk.java.net/jdk/jdk11/file/80abf702eed8/src/hotspot/share/prims/jvm.cpp#l3164
thread.cpp的interrupt方法:
https://hg.openjdk.java.net/jdk/jdk11/file/d2137bd1e57d/src/hotspot/share/runtime/thread.cpp#l823
os_posix.cpp的is_interrupted方法:
https://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/hotspot/os/posix/os_posix.cpp#l638
Thread核心方法:
https://gitee.com/wyz-A2/JavaInterview/tree/master/Concurrence/src/main/java/com/wyz/thread/core
举报/反馈
—民族音乐赏析会—
济南起步区第二届黄河文化季暨济南市公益演出走基层活动
为传承中华优秀传统文化,弘扬优秀民族音乐,守住中华民族的根和魂,让民族音乐走进同学们的的精神生活里,让民族音乐焕发出勃勃生机。2022年10月31日下午,在济南市文化和旅游局的指导下,由济南市起步区社会事业部联合济南歌舞团组织的“泉韵飘香”民族音乐赏析会—济南起步区第二届黄河文化季暨济南市公益演出走基层活动在山东齐鲁技工学校隆重举行。学校领导及全体师生齐聚操场,共同欣赏这场音乐盛会。
下午14:00,同学们满怀期待,秩序井然地来到学校操场。伴随着悦耳动听的打击乐音乐会拉开帷幕。本场演出汇聚了打击乐、新疆民歌、琵琶独奏、男子独舞、科幻魔术、唢呐独奏及不同省份的经典民歌等多种艺术表现形式,内容丰富多彩、形式多样、地方特色鲜明,经典贯穿演出全程。01《夜深沉》演奏:高进02《手挽手》演唱:刘清杰 同学们和着音乐,打着节拍,沉浸在民族音乐文化中,感受了中华音乐文化的无限魅力,为日益强大的祖国感到自豪!
03舞蹈《蓝色印记》表演:李君豪04魔术《科学之谜》表演:任虎05《沂蒙山小调》 演唱:杨柳青06《桃花红杏花白》演唱:韩 霞07唢呐《百鸟朝凤》演奏:高 飞08《我和我的祖国》演奏:全体演员 乐器的和鸣,缠绵而悠扬;歌唱家的歌声,优美而动听。最后,在《我和我的祖国》的歌声中,音乐会圆满落幕。
本场演出充分展现出我们国家优秀民族音乐丰富而独特的艺术魅力,在弘扬中国传统文化精神与力量的同时,也加深了同学们对于中华民族传统价值观的理解与感受。
举报/反馈