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

佛山市桂城建设局网站百度竞价防软件点击软件

佛山市桂城建设局网站,百度竞价防软件点击软件,iis网站发布教程,企业展厅装修设计Synchronized底层实现 简单来说#xff0c;Synchronized关键字的执行主体是线程对象#xff0c;加锁是通过一个锁对象来完成的是#xff0c;而锁对象底层关联了一个c源码的monitor的对象#xff0c;monitor对象底层又对应了操作系统级别的互斥锁#xff0c;同一时刻只有一…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:轻量级锁 锁升级过程 无锁的情况下第一个线程尝试获得偏向锁尝试给对象头mark word字段指向的thread id用CAS操作替换成自己的成功了就直接获得偏向锁如果CAS操作失败意味着同时有多个线程抢锁这时会在抢到锁的线程到达安全点的时候将锁升级为轻量级锁具体操作拷贝mark word到lock record中放入到所有抢锁线程的栈中并且mark word会有指针指向当前占用的锁线程的lock record。其他抢锁的线程利用CAS操作多次自旋尝试将mark word中的指针指向自己的lock record。自旋到一定次数升级为重量级锁抢锁失败的线程进入阻塞状态这时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://www.hkea.cn/news/14403444/

相关文章:

  • 做二手平台公益的网站深圳网咯鸟网站建设公司怎么样
  • 专业网站设计软件工具wordpress使用原版编辑器
  • 化妆品销售网站开发与设计网站如何建设目录结构
  • 哪里建设网站最好wordpress数组转字符串
  • 智能化网站建设网站开发工具论文
  • 成都旅游网站建设规划方案深圳安嘉建设有限公司网站
  • 深圳模板网站建设设计公司体验营销策划方案
  • 在中国建设工程造价管理协会网站国企单位网站建设方案
  • 电子商务网站建设具体方案外贸建站有哪些公司
  • 讨论致同国际网站建设情况制作网页的网站推荐
  • 基础建设期刊在哪个网站可以查阿里巴巴网站建设哪家好
  • 上海免费建站模板杨和网站建设
  • 全部网站北京网站外包公司
  • 做两个单页面网站大概多少钱网站推广教程优化整站
  • 潮州网站建设推广wordpress 卢松松主题
  • 笑话 语录用什么网站做软件定制开发介绍
  • 网站关键词优化排名软件系统服务器地址
  • 中山网站建设多少钱兰州人工优化
  • 相册网站建设目的网站建设分录怎么开
  • 网站注册怎么做屏蔽过滤简要说明网站建设的基本流程
  • python做网站前端重庆网站开发公司
  • 网站建设需求信息长沙网站设计的公司
  • 通付盾 建设公司网站公司网站模板源代码
  • 国外营销型网站建设有没有做高仿的网站
  • 江西南昌网站定制电商运营seo是什么
  • 数码设计网站阅读网站怎么做
  • les做ml网站网站内容编写方法
  • 网站开发用什么编辑语言好汕尾招聘网
  • 网站设计网站项目流程图网络 企业网站
  • 用网站做CAN总线通信好吗安装完wordpress第一件事