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

公益广告不浪费水网站怎么做莒县建设局网站

公益广告不浪费水网站怎么做,莒县建设局网站,wordpress的修订,重庆装修公司口碑排名1. 偏向锁 偏向锁就是在运行过程中#xff0c;对象的锁偏向某个线程。即在开启偏向锁机制的情况下#xff0c;某个线程获得锁#xff0c;当该线程下次再想要获得锁时#xff0c;不需要重新申请获得锁#xff08;即忽略synchronized关键词#xff09;#xff0c;直接就可…1. 偏向锁 偏向锁就是在运行过程中对象的锁偏向某个线程。即在开启偏向锁机制的情况下某个线程获得锁当该线程下次再想要获得锁时不需要重新申请获得锁即忽略synchronized关键词直接就可以执行同步代码比较适合竞争较少的情况。 偏向锁的目标是减少无竞争且只有一个线程使用锁的情况下使用轻量级锁而产生的性能消耗。轻量级锁每次申请、释放锁都至少需要一次CAS但偏向锁只有初始化时需要一次CAS。 如果明显存在其他线程申请锁那么偏向锁将很快膨胀为轻量级锁。如果需要使用参数-XX:-UseBiasedLocking禁止偏向锁优化默认打开。 1.1 偏向锁获取过程 查看Mark Word中偏向锁的标识以及锁标志位若是否为偏向锁为1并且锁标志位为01则该锁为可偏向状态。若该锁为可偏向状态判断Mark Word中的线程ID与当前线程ID是否相等如果相同则直接执行同步代码否则通过CAS操作竞争锁。如果竞争成功将Mark Word中线程ID设置为当前线程ID然后执行同步代码。如果竞争失败说明有其他线程竞争。持有偏向锁状态的线程在没有字节码正在执行的情况下释放锁然后恢复到未锁定状态或者膨胀为轻量级锁。 1.2 偏向锁释放过程 持有偏向锁的线程不会主动释放锁只有遇到其他线程尝试竞争偏向锁时持有偏向锁状态的线程才会释放锁。持有持有偏向锁的线程需要等到所有的同步任务执行完成之后即没有字节码正在执行才会暂停持有偏向锁的线程然后恢复到未锁定状态或者膨胀为轻量级锁。 Mark Word是对象头的一部分每个线程都拥有自己的线程栈虚拟机栈记录线程和函数调用的基本信息。 2. 轻量级锁 轻量级锁是相对于重量级锁而言的使用时不需要申请互斥量。而是在没有多线程竞争的情况下使用轻量级锁能够减少性能消耗但是当多个线程同时竞争锁时轻量级锁会膨胀为重量级锁。 轻量级锁的目标是减少无实际竞争情况下使用重量级锁产生的性能消耗包括系统调用引起的内核态与用户态切换、线程阻塞造成的线程切换等。 1.1 轻量级锁获取过程 当线程执行代码进入同步块时若Mark Word锁标识为无锁状态是否为偏向锁为0锁标志位为01虚拟机会在当前线程的栈帧中建立一个名为锁记录Lock Record的空间用于存储当前对象的Mark Word的拷贝官方称之为Dispalced Mark Word。复制对象头中的Mark Word到锁记录中。复制成功后虚拟机将使用CAS操作尝试将对象的Mark Word更新为指向Lock Record的指针并将Lock Record里的owner指针指向对象的Mark Word如果更新成功则这个线程拥有了这个锁并将锁标志位设置00此对象处于轻量级锁定状态。如果更新失败虚拟机会检查对象的Mark Word是否指向当前线程的栈帧。如果是则说明当前线程已经拥有这个锁可进入执行同步代码如果不是则说明多个线程竞争轻量级锁就会膨胀为重量级锁Mark Word中存储重量级锁互斥锁的指针后面等待锁的线程也要进入阻塞状态。 1.2 轻量级锁释放过程 通过CAS操作尝试把线程中复制的Displaced Mark Word对象替换当前的Mark Word。如果替换成功整个同步过程就完成了。如果替换失败说明有其他线程尝试过获取该锁此时锁已膨胀那就要在释放锁的同时唤醒被挂起的线程。 3. 重量级锁 重量级锁为synchronized通过对象内部的一个叫做监视器锁monitor来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态这个成本非常高状态之间的转换需要相对比较长的时间这就是为什么synchronized效率低的原因。因此这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。 4. 自旋锁 在自旋状态下当一个线程A尝试进入同步代码块但是当前的锁已经被线程B占有时线程A不进入阻塞状态而是不停的空转等待线程B释放锁。如果锁的线程能在很短时间内释放资源那么等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞状态只需自旋等持有锁的线程释放后即可立即获取锁避免了用户线程和内核的切换消耗。 优点开启自旋锁后能减少线程的阻塞在对于锁的竞争不激烈且占用锁时间很短的代码块来说能提升很大的性能在这种情况下自旋的消耗小于线程阻塞挂起的消耗。 缺点在线程竞争锁激烈或持有锁的线程需要长时间执行同步代码块的情况下使用自旋会使得CPU做太多无用功。 JDK1.6中设置参数-XXUseSpinning开启。JDK1.7后由JVM自动控制。 5. 自适应自旋锁 自适应意味着自旋的时间不再固定了而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定 如果在同一个锁对象上自旋等待之前成功获得过的锁并且持有锁的线程正在运行中那么虚拟机就会认为这次自旋也很有可能再次成功因此允许自旋等待持续相对更长的时间。相反的如果对于某个锁自旋很少成功获得过那么以后要获取这个锁时将可能减少自旋时间甚至省略自旋过程以避免浪费处理器资源。 自适应自旋解决的是“锁竞争时间不确定”的问题。JVM很难感知确切的锁竞争时间而交给用户分析就违反了JVM的设计初衷。自适应自旋假定不同线程持有同一个锁对象的时间基本相当竞争程度趋于稳定。因此可以根据上一次自旋的时间与结果调整下一次自旋的时间。 6. 总结 锁类型 优点 缺点 适用场景 偏向锁 加锁和解锁不需要额外的消耗和执行非同步方法比仅存在纳秒级的差距。 如果线程间存在锁竞争会带来额外的锁撤销的消耗。 适用于只有一个线程访问同步块场景。 轻量级锁 竞争的线程不会阻塞提高了程序的响应速度。 如果始终得不到锁竞争的线程使用自旋会消耗CPU。 追求响应时间。同步块执行速度非常快。 重量级锁 线程竞争不使用自旋不会消耗CPU。 线程阻塞响应时间缓慢。 追求吞吐量。同步块执行速度较长。
http://www.w-s-a.com/news/302097/

相关文章:

  • 制作微网站多少钱阿里巴巴做网站的电话号码
  • 风铃建站模板安卓手机软件开发外包
  • 深圳市住房和建设局门户网站域名转移影响网站访问吗
  • 做母婴网站赚钱汕头百姓网
  • 那个网站建设好动漫制作技术升本可以升什么专业
  • 网站建设企业响应式网站模板广西建设部投诉网站
  • app营销的特点wordpress优化方案
  • 静安网站建设公司如何编辑wordpress
  • 做网站的职位叫什么问题常州金坛网站建设
  • 保健品网站模板用jsp做的网站前后端交互
  • 网站带后台品牌网页设计图片
  • 保定清苑住房和城乡建设局网站分类信息网站程序
  • 可以做视频推广的网站选择大连网站建设
  • 在线网站开发网站在哪里
  • 建站的步骤上海快速优化排名
  • 招聘网站做一下要多少钱网站设计公司 国际
  • 巩义专业网站建设公司首选seo研究院
  • 大流量网站解决访问量友情链接如何添加
  • 教育网站建设网永康市住房和城乡建设局网站
  • 阿里巴巴官网网站django 做网站的代码
  • 网站建设 军报wordpress 订餐模板
  • 网站虚拟主机 会计处理石家庄站建设费用多少
  • 网站建设 服务内容 费用简述网站开发流程
  • 公司制作网站跟企业文化的关系空间制作网站
  • 浙江建设监理协会网站个人网站设计规划书
  • wordpress太卡了贵州seo推广
  • 企业介绍微网站怎么做的手机软件商城免费下载
  • 新手网站设计定价网站开发销售
  • 网站开发公司oa有没有找人做标书的网站
  • 传统门户网站有哪些人武部正规化建设