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

广州网站建设weeken海南注册公司在哪个网站

广州网站建设weeken,海南注册公司在哪个网站,百度教育会员,做网站的公司挣钱吗对象头锁机制原则 Synchronized 的原理是什么 Synchronized 是由JVM实现的一种实现互斥同步的实现方式。如果查看synchronized关键字修饰的字节码#xff0c;会发现在编译器生成了monitorenter和monitorexit两个字节码指令。   这两个指令的意思就是在虚拟机执行到monitore…对象头锁机制原则 Synchronized 的原理是什么 Synchronized 是由JVM实现的一种实现互斥同步的实现方式。如果查看synchronized关键字修饰的字节码会发现在编译器生成了monitorenter和monitorexit两个字节码指令。   这两个指令的意思就是在虚拟机执行到monitorenter指令的时候首先尝试获取到对象锁对象头这部分在对象的最前端包含两部分或者三部分Mark Words、Klass Words如果对象是一个数组那么还可能包含第三部分数组的长度。Mark Word需要重点说一下这里面主要包含对象的哈希值、年龄分代、锁标志位等大小为32位或64位   如果这个对象没有锁定或者当前线程已经拥有了这个对象锁那么就把锁的计数器进行1操作当执行monitorexit指令的时候将锁计数器进行-1操作当计数器为0的时候锁就被释放了。   如果获取对象失败了当前线程就要阻塞等待直到对象锁被另外一个线程释放。 刚刚提到的对象所这个锁到底是什么如何确定对象的锁 锁 的本质是monitorenter和monitorexit 字节码指令的一个Reference类型的参数也就是是要锁定和解锁的对象。   Synchronized可以修饰不同的对象所以对应的对象锁可以通过如下的方式确定 1、如果Synchronized明确指定了锁定对象说明加锁对象为该对象。2、如果没有明确指定  如果Synchronized修饰的方法为非静态方法表示此方法对应的对象为锁对象  如果Synchronized修饰的方法为静态方法则表示这个方法对应的类对象为锁对象。 需要注意的是当一个对象被锁住的时候对象里面所有用synchronized修饰的方法都将会被阻塞而对象里非synchronized修饰方法可以正常被调用不受到影响。 什么是可重入性为什么synchronized是可重入锁 可重入性是锁的基本要求是为了解决死锁的情况发生。   如图所示在一个类中同步调用了另一个同步方法假如synchronized不支持重入进入method2的时候当前线程获取锁method2中又执行了method1的时候当前线程又要尝试获取锁这个时候如果不支持重入那就要等待释放所以自己获取锁自己等释放就会导致死锁。 对于synchronized来说重要性是显而易见的。在执行monitorenter指令的时候 如果这个对象没有锁定或者当前线程已经拥有了这对象锁就把锁的计数器加一实际上就是通过这种机制来实现锁重入。 JVM对于Java的原生锁做了那些优化 在Java6之前Monitor实现完全依赖底层操作系统的互斥锁来实现也就是在上面提到的获取/释放锁的逻辑。 由于Java层面的线程与操作系统的原生线程有对应的映射关系如果要将一个线程进行阻塞或者唤醒都需要操作系统线程的协助也就是从用户态到内核态的切换这种相互之间的切换其实是一件非常消耗内存的事情。 所以JDK对于这种操作进行了很多的优化。 使用自旋锁也就是说把线程进行阻塞操作之前让线程自旋等待一段时间可能在等待的时候其他线程已经解锁了这个时候就不需要线程在等待了避免了用户态到内核态的切换。 在JDK中提供了三种不同的Monitor的实现也就是三种不同的锁机制。 偏向锁轻量级锁重量级锁 这三种锁机制使得JDK对于synchronized的优化进行进一步的提升当JVM检测到不同的资源竞争状况的时候会自动切换到合适的锁实现机制也就是所谓的锁的升级与降级。 当没有出现竞争的时候默认使用的是偏向锁。 JVM会利用CAS操作在对象头的MarkWord部分设置线程ID以表示这个对象偏向于当前线程所以并不涉及真正的互斥锁因为在很多应用场景中大部分对象生命周期中最多会被一个线程锁定使用偏向锁可以降低无竞争开销。 如果有一个线程试图锁定偏向锁对象的时候JVM就撤销偏向锁切换到轻量级锁。 轻量级锁通过CAS操作Mark Word来试图获取锁如果重试成功就使用普通的轻量级锁否则就升级为重量级锁。 为什么说synchronized是非公平锁 非公平主要表现在获取锁的行为上并非按照申请锁的时间前后给等待线程分配锁每当锁被释放之后任何一个线程都有机会竞争到锁这样做的目的是为了提高执行性能缺点是会产生线饥饿现象。 什么是锁消除和锁粗化 锁消除指虚拟机及时编译器在运行时对一些代码上要求同步但被检测到不可能存在共享数据竞争的锁进行消除。主要根据逃逸分析。开发者怎么会在明知道不会存在数据竞争的情况下使用同步操作呢很多的操作其实不是开发者自己加入的。锁粗化原则上同步块的作用范围要尽量小。但是如果一系列的连续操作都对同一个对象反复加锁和解锁甚至加锁操作在循环体内频繁地进行互斥同步操作也会导致不必要的性能损耗。锁粗化就是增加锁的作用域。 为什么说 synchronized是一个悲观锁乐观锁的实现原理又是什么什么是CAS它有什么特性 synchronized是一个悲观锁因为他的并发策略是悲观的不管是否会产生竞争任何的数据都必须要加锁、用户态核心态转换、维护锁计数器和检查是否有被阻塞的线程需要被唤醒等操作。 随着硬件指令集的发展可以使用基于冲突检测的乐观锁并发策略。先进性操作如果没有其他线程征用数据那么就操作成功。 如果共享数据有被用到产生了冲突那就再进行其他的补偿措施。这种乐观的并发策略的许多实现不需要线程挂起所以被称为非阻塞同步。 乐观锁的核心算法是CASCompareand Swap,比较交换涉及到三个操作数内存值、预期值、新值。当且仅当预期值和内存值相等的时候才将内存值修改新值。 这样处理的逻辑是首先检查某块内存的值是否跟之前读取过的值一样如果不一样则表示期间此内存值已经被别的线程修改过了舍弃本次操作否则则说明在此期间没有其他线程对此内存值进行修改就可以直接使用该值。 CAS具有原子性他的原子性有CPU硬件指令实现保证即使用JNI调用Native方法调用C编写的硬件指令JDK中提供了Unsafe类执行这些操作。 乐观锁一定就是好的 乐观锁避免了悲观锁独占对象的现象同时也提高了并发性能但它的缺点 1、乐观锁只能保证一个共享变量的原子性操作如果多一个或者几个变量乐观锁就有点力不从心了但互斥锁能轻易地解决该问题不管对象数量多少以及对象大小。2、长时间自旋操作可能导致开销较大加入CAS长时间不成功而一直自旋就会导致CPU消耗过大。3、ABA问题CAS的核心思想是比较交换如果在过程中判断逻辑不够严谨就会导致在一个线程将数据从A改成B在另一个线程使用的时候该线程又将数据改回了A这样的时候对于另一个线程其实并没有感知到B值的存在。其实在整个过程中这个值是被修改过的。这种情况对于运算依赖比较大的场景影响比较大。解决的思路就是引入版本机制。
http://www.dnsts.com.cn/news/8216.html

相关文章:

  • 制作logo的软件金华网站建设优化技术
  • 代做课程设计网站推广app大全
  • 大型网架加工厂搜索引擎优化原理
  • 微信手机网站搭建下载室内设计排版模板网站有哪些
  • 外包网站建设哪家好网站建设公司怎么推广
  • 同个主体新增网站备案表格模板免费下载网站
  • 艺术品网站模板天猫网店怎么开店
  • 建立一个企业网站需要花多少钱启动wordpress linux
  • 做关于车的网站有哪些网络营销主要干什么
  • 网站建设公司包括哪些方面网络营销案例分析题万能模板
  • 网站建设公司落寞合购吧登录WordPress
  • 网站变exe文件怎么做免费有趣的网站
  • wordpress代码高亮广州新塘排名seo优化公司
  • 建筑设计方案网站广州seo技术培训
  • 网站服务搭建抖音代运营销售话术
  • 哈尔滨网站开发企业上哪儿找做网站的客户
  • flash上传空间网站自动做网页的网站
  • 专门看广告的网站一佰互联自助建站
  • 设计新闻发布网站模板主机网站建设
  • 四川住房和城乡建设厅进不去网站如何恢复wordpress
  • 茂名专业网站制作公司沈阳网站页面设计公司
  • wordpress如何开启多站点百度影音在线电影
  • 马鞍山网站建设推广网站用表格做的吗
  • 广州17做网站非洲外贸采购商
  • 网站维护升级访问中国民营企业500强榜单
  • 上海建设学院网站做百度推广一定要有网站吗
  • 文明网站建设管理培训心得十万pv的网站建设
  • 各大网站推广平台wordpress imgedit
  • 肇庆做网站公司有口碑的南昌网站建设
  • WordPress文章投票seo搜索引擎优化岗位要求