美文网首页
Java中的锁的几种状态

Java中的锁的几种状态

作者: 励志做一名老中医 | 来源:发表于2018-09-22 14:29 被阅读103次

锁的状态分几种, 无锁状态--->偏向锁-->轻量级锁-->重量级锁

锁可以升级不能降级
目的是:提高获取锁和释放锁的效率.

注意:
线程获取锁,其实是在获取线程的monitior,加锁和解锁就是线程在执行monitorrenter和monitorexit方法

  1. 偏向锁

当一个线程获取锁的时候会在 锁中记录线程ID 这样在这个线程进入到这个锁中就不需要使用CAS操作进行加锁和解锁的操作了.

线程会先测试对象头中是否存储着执行当前线程的偏向锁,如果存在则尝试使用CAS算法将对象头中的偏向锁执行当前线程.

如果 当前线程在持有锁的时候,该锁被其他线程尝试获取, 其他线程获取锁失败时会发出撤销偏向锁的指令,当前线程接到命令后等待全局安全点时会暂停当前线程,将锁中的执行ID删除. 执行完撤销偏向锁后继续执行当前线程,但是当前线程已经不再持有当前锁,所以当前线程已经不是偏向锁状态.

1.1 关闭偏向锁
设置jvm参数: -XX:BiasedLockingStartupDelay=0

  1. 轻量级锁
    加锁:
    线程在获取锁之前jvm会在当前线程中的栈帧中创建用于存储锁记录的空间,线程获取锁时会尝试将对象头中的mark word 替换成为执行当前线程中指向锁记录的指针

解锁:
线程使用CAS操作将Mark Word(栈帧中的锁记录)替换到请求头中,如果成功代表没有竞争发生,如果不成功锁膨胀为重量级锁.

3.重量级锁:
因为轻量级锁会导致线程自旋会产生消耗,所以锁膨胀为轻量级锁的时候就不会进行降级了,如果对象头中的轻量级锁膨胀为重量级锁,所有获取锁的线程都会进行阻塞等待当前线程释放锁.

相关文章

  • Java中的锁的几种状态

    锁的状态分几种, 无锁状态--->偏向锁-->轻量级锁-->重量级锁 锁可以升级不能降级目的是:提高获取锁和释放...

  • (转)Java中的几种锁机制

    出自:Java中的几种锁机制今天跟着blog整理一下几种锁,比如说 乐观锁和悲观锁,可重入锁和不可重入锁,自旋锁…...

  • JVM锁优化总结

    最近研究学习了Java1.6对锁的优化技术,重点就是偏向锁,轻量级锁。如下是几种锁之间的状态转换,清晰明了: 结合...

  • Java线程中的几种状态

    线程在一定条件下,状态会发生变化。线程一共有以下几种状态: 1、新建状态(New):新创建了一个线程对象。 2、就...

  • Java Thread中的几种状态

    java Thread类中定义了线程的六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIME...

  • java的几种锁

    java特性的锁只有两种,volatile和synchronized,其他的都是lib包实现。 synchroni...

  • 笔记

    java中有哪几种锁? 1.有synchronized和lock两种锁,synchronized是java的...

  • 并发编程ReentrantLock(一)

    一提并发绝对离不开锁,生活中锁有好几种,比如钢丝锁,U形锁,不同的门锁,java中的锁也是一样,他们锁的有型有色,...

  • Android锁的实现

    锁的对比 java中的锁一共有4种状态,级别从低到高分别是: 无锁状态 偏向锁 轻量级锁 重量级锁 锁只能升级,不...

  • 高并发下如何合理使用锁

    在并发环境下想要共享变量,一旦涉及修改操作,就需要用到锁了。Java 中的锁有这么几种:synchronized、...

网友评论

      本文标题:Java中的锁的几种状态

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