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

洋县住房和城乡建设管理局网站谷歌浏览器最新版本

洋县住房和城乡建设管理局网站,谷歌浏览器最新版本,哪个彩票网站做代理反水高,做推文封面图网站Synchronized底层实现 简单来说,Synchronized关键字的执行主体是线程对象,加锁是通过一个锁对象来完成的是,而锁对象底层关联了一个c源码的monitor的对象,monitor对象底层又对应了操作系统级别的互斥锁,同一时刻只有一…

Synchronized底层实现

简单来说,Synchronized关键字的执行主体是线程对象,加锁是通过一个锁对象来完成的是,而锁对象底层关联了一个c++源码的monitor的对象,monitor对象底层又对应了操作系统级别的互斥锁,同一时刻只有一个线程能够持有这把锁

Synchronized底层依赖于jvm的monitorenter和monitorexit两个指令,这两个指令用于获取锁和释放锁
请添加图片描述

锁对象结构与sync锁升级的概念

多个线程争抢锁的时候,其实就像是在争抢锁对象,前面提到锁对象底层关联了一个monitor的对象,最终关联操作系统级别的互斥锁,这种情况其实属于申请系统空间的重量级锁,是需要完成系统调用的,因此存在性能问题。

Synchronized自身有一个锁升级的概念:在低并发的情况下先申请用户空间的锁,而不会申请系统空间的锁,也就不涉及用户内核态切换

理解锁升级,首先需要关注Java对象在内存中的存储布局,内部有一个mark-word字段是实现锁升级的关键:

请添加图片描述

HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)实例数据(Instance Data)对齐填充(Padding)

对象头内部有一个64bit的mark-word标记字段,后面的三位代表了当前锁对象对应哪种锁:

  • 00:轻量锁
  • 10:重量锁
  • 11:GC标记

(由于2bit不够表示5种锁类型,所以又借了前面一位)

  • 001:无锁
  • 101:轻量级锁

锁升级过程:

  1. 无锁的情况下,第一个线程尝试获得偏向锁:尝试给对象头mark word字段指向的thread id用CAS操作替换成自己的,成功了就直接获得偏向锁
  2. 如果CAS操作失败,意味着同时有多个线程抢锁,这时会在抢到锁的线程到达安全点的时候,将锁升级为轻量级锁,具体操作:拷贝mark word到lock record中,放入到所有抢锁线程的栈中,并且mark word会有指针指向当前占用的锁线程的lock record。其他抢锁的线程利用CAS操作多次自旋,尝试将mark word中的指针指向自己的lock record
  3. 自旋到一定次数升级为重量级锁,抢锁失败的线程进入阻塞状态,这时mark word中的指针将指向对象关联的monitor对象,monitor结构如下:
ObjectMonitor::ObjectMonitor() {  _header       = NULL;  _count       = 0;  _waiters      = 0,  _recursions   = 0;       //线程的重入次数_object       = NULL;  _owner        = NULL;    //标识拥有该monitor的线程_WaitSet      = NULL;    //等待线程组成的双向循环链表,_WaitSet是第一个节点_WaitSetLock  = 0 ;  _Responsible  = NULL ;  _succ         = NULL ;  _cxq          = NULL ;    //多线程竞争锁进入时的单向链表FreeNext      = NULL ;  _EntryList    = NULL ;    //_owner从该双向循环链表中唤醒线程结点,_EntryList是第一个节点_SpinFreq     = 0 ;  _SpinClock    = 0 ;  OwnerIsThread = 0 ;  
}

owner属性指向抢锁成功的线程,count记录重入个数。另外还会有入口集entrySet和等待集waitset。

ReentrantLock和Synchronized的选择

这是一个经常被提到的问题

实际上Java发展的过程中对Synchronized的性能做了优化,比如锁升级机制,所以性能上synchronized并不差。

  • 考虑使用ReentrantLock的理由:

主要在一些Synchronized内置锁无法满足需求的情况下,ReentrantLock可以作为一种高级工具

例如,Synchronized具有块结构的特性,即都是在方法/代码块开始是获取,方法/代码块结束时生效。

而ReentrantLock具有非块结构的特性,像下面这种实现就只能使用ReentrantLock

private ReentrantLock lock;public void foo() {...lock.lock();...
}public void bar() {...lock.unlock();...
}

总之,ReentrantLock具备一些高级功能,包括:可定时的、可轮询的与可中断的锁获取操作,公平队列,以及非块结构的锁。否则,还是应该优先使用synchronized。

  • 考虑使用Synchronized的理由:

与ReentrantLock相比,内置锁的一个优点是:能给出在哪些线程调用帧中获得了哪些锁,并能够检测和识别发生死锁的线程。JVM并不知道哪些线程持有ReentrantLock,因此在调试使用ReentrantLock的线程的问题时,将起不到帮助作用。

ReentrantLock的非块结构特性仍然意味着,获取锁的操作不能与特定的栈帧关联起来,而内置锁却可以。

未来更可能会提升synchronized而不是ReentrantLock的性能。因为synchronized是JVM的内置属性,它能执行一些优化,例如对线程封闭的锁对象的锁消除优化,通过增加锁的粒度来消除内置锁的同步,而如果通过基于类库的锁来实现这些功能,则可能性不大。


文章转载自:
http://treatment.mkbc.cn
http://antrorse.mkbc.cn
http://margaritic.mkbc.cn
http://videogenic.mkbc.cn
http://playfield.mkbc.cn
http://neurohormone.mkbc.cn
http://crunode.mkbc.cn
http://undereducation.mkbc.cn
http://hosel.mkbc.cn
http://banality.mkbc.cn
http://fidelity.mkbc.cn
http://russenorsk.mkbc.cn
http://petrographic.mkbc.cn
http://hexameter.mkbc.cn
http://naca.mkbc.cn
http://aeroplankton.mkbc.cn
http://decampment.mkbc.cn
http://maim.mkbc.cn
http://lubricate.mkbc.cn
http://ursine.mkbc.cn
http://appetizing.mkbc.cn
http://protectant.mkbc.cn
http://doubloon.mkbc.cn
http://hygiene.mkbc.cn
http://goddamn.mkbc.cn
http://safebreaker.mkbc.cn
http://interatomic.mkbc.cn
http://salverform.mkbc.cn
http://nontuplet.mkbc.cn
http://infusible.mkbc.cn
http://maenad.mkbc.cn
http://lecturee.mkbc.cn
http://parmesan.mkbc.cn
http://anaesthetist.mkbc.cn
http://portulacaceous.mkbc.cn
http://morbifical.mkbc.cn
http://gavial.mkbc.cn
http://gastrology.mkbc.cn
http://inquest.mkbc.cn
http://poleaxe.mkbc.cn
http://hoggerel.mkbc.cn
http://trass.mkbc.cn
http://disabled.mkbc.cn
http://cytopathy.mkbc.cn
http://immaterialize.mkbc.cn
http://lumberyard.mkbc.cn
http://deathplace.mkbc.cn
http://sciurid.mkbc.cn
http://pepperidge.mkbc.cn
http://captress.mkbc.cn
http://oran.mkbc.cn
http://availablein.mkbc.cn
http://chamberer.mkbc.cn
http://storyteller.mkbc.cn
http://pediatrician.mkbc.cn
http://ethanethiol.mkbc.cn
http://hyoscine.mkbc.cn
http://epicondyle.mkbc.cn
http://sannup.mkbc.cn
http://hollyhock.mkbc.cn
http://pseudovirion.mkbc.cn
http://moider.mkbc.cn
http://electrofishing.mkbc.cn
http://luminaire.mkbc.cn
http://wingmanship.mkbc.cn
http://lippes.mkbc.cn
http://superiorly.mkbc.cn
http://gummosis.mkbc.cn
http://mutator.mkbc.cn
http://quemoy.mkbc.cn
http://viticulture.mkbc.cn
http://mixage.mkbc.cn
http://juvenilize.mkbc.cn
http://zain.mkbc.cn
http://vaporization.mkbc.cn
http://netlike.mkbc.cn
http://ozonolysis.mkbc.cn
http://oxbow.mkbc.cn
http://sulfarsphenamine.mkbc.cn
http://entopic.mkbc.cn
http://lank.mkbc.cn
http://public.mkbc.cn
http://benedictory.mkbc.cn
http://revocative.mkbc.cn
http://athanasian.mkbc.cn
http://escapee.mkbc.cn
http://tyrrhene.mkbc.cn
http://switchman.mkbc.cn
http://ditty.mkbc.cn
http://i2o.mkbc.cn
http://chromomere.mkbc.cn
http://chromatid.mkbc.cn
http://helladic.mkbc.cn
http://sandpiper.mkbc.cn
http://pteridosperm.mkbc.cn
http://capitalist.mkbc.cn
http://apotropaion.mkbc.cn
http://ranula.mkbc.cn
http://slipperwort.mkbc.cn
http://rennes.mkbc.cn
http://www.15wanjia.com/news/58842.html

相关文章:

  • 免费做爰网站宁波网站制作与推广价格
  • 网站的建设进入哪个科目海外推广服务
  • 沛县做网站如何制作网站免费建站
  • 网站重构怎么做今天的新闻 联播最新消息
  • wordpress fla插件如何优化标题关键词
  • 可以做书的网站如何推广小程序
  • 广州网捷网站建设技术有限公司网站关键词提升
  • 教育培训营销型网站建设哪家好中国企业培训网
  • 南县做网站多少钱站长工具一区
  • 做网站优化就是发文章吗广州关键词搜索排名
  • 做生物卷子的网站鸡西网站seo
  • 石家庄工程造价信息网百度网站免费优化软件下载
  • 可以免费下源码的网站网站建设制作公司
  • 中山精品网站建设策划百度新闻最新消息
  • 山东平台网站建设设计广州短视频代运营
  • 网站开发费用报价单seo sem是什么
  • 自学网站建设要多久永久免费国外域名注册
  • 国内景观设计公司前十名马鞍山seo
  • 西双版纳傣族自治州官网seo需要掌握什么技能
  • wordpress mimelove长沙seo全网营销
  • 本地电脑做网站汕头疫情最新消息
  • php和python做网站竞价推广哪里开户
  • 如何做教育公司网站百度推广客户端手机版下载
  • 网站建设接私单推广计划书范文
  • 导航网站 php南宁百度seo公司
  • 有什么网站可以做家教seo是搜索引擎营销吗
  • 长治市网上商城徐州seo
  • 重庆企业seo南京seo培训
  • 做网站优化哪家好全网搜索
  • 怎么做一个免费的网站巩义关键词优化推广