美文网首页
java 内存模型 锁的理解

java 内存模型 锁的理解

作者: 真老根儿 | 来源:发表于2018-07-23 20:31 被阅读0次

java 内存模型 锁的理解

Java 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。
个人对锁的理解:

偏向锁

引入目的是消除在无竞争情况下的同步原语,进一步提高程序的运行性能。
在没有线程竞争同步代码块的时候,会在对象头和栈帧中的锁记录里存储偏向锁的线程ID,以后该线程在进入和退出同步块的时候不需要进行CAS操作来加锁解锁,只需简单地测试一下对象头里的Mark Word里是否存储着指向当前线程的偏向锁。

轻量锁

虚拟机使用CAS操作尝试将对象的Mark Word更新为指向Lock Record=的指针

  • 如果这个动作更新成功了,那么这个线程就拥有了该对象的锁,并且标记Mark Word锁标志位,表示此对象处于轻量级锁状态。
  • 如果这个动作更新失败了,虚拟机首先会检查对象的Mark Word是否指向当前线程的栈帧,如果只说明当前线程已经拥有了这个对象的锁,那就可以直接进入到同步块继续执行,否则说明这个锁对象已经被其他线程抢占了,如果有两条以上的线程争用同一个锁,那轻量级的锁就不再有效,要膨胀为重量级锁,锁标志的状态值变为“10”,后面等待锁的线程也要进入阻塞状态。

相关文章

  • java 内存模型 锁的理解

    java 内存模型 锁的理解 Java 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”...

  • 九、Java内存模型与线程

    一、Java内存模型 1.概念   Java内存模型可以理解为Java内存访问模型。主要目标是定义程序中各个变量的...

  • Java 内存模型

    Java 内存模型由于 ConcurrentHashMap 是建立在 Java 内存模型基础上的,为了更好的理解 ...

  • volatile详解

    Java内存模型 想要理解 volatile 为什么能确保可见性,就要先理解Java中的内存模型是什么 样的。 J...

  • 多线程

    java并发,java内存模型,java锁https://github.com/CyC2018/CS-Notes/...

  • volatile变量

    上篇文章介绍了Java内存模型,没看过《深入理解Java虚拟机》的同学可以去看下Java内存模型 ...

  • volatile

    一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。 Ja...

  • volatile关键字

    一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。 Ja...

  • 并发编程有关知识点(五)

    Java 内存模型 java线程安全总结 深入理解java内存模型系列文章 线程状态: 一张图让你看懂JAVA线程...

  • 高效并发

    从JVM的角度看一下Java与线程,内存模型,线程安全以及JVM对于锁的优化 硬件内存模型与JVM内存模型 硬件的...

网友评论

      本文标题:java 内存模型 锁的理解

      本文链接:https://www.haomeiwen.com/subject/tlqsmftx.html