轻量级锁和重量级锁的区别分别有哪些?java锁机制教程

Java中有着各种锁机制,今天我们要说的就是其中两种状态,轻量级锁与重量级锁,小伙伴们知道它们的区别分别有哪些吗?下面来了解一下吧。

首先我们了解一下有哪些锁状态吧

锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级到重量级锁,注:锁的升级是单向的,不会出现降级现象。JDK 1.6中默认是开启偏向锁和轻量级锁的,我们也可以通过-XX:-UseBiasedLocking来禁用偏向锁。锁的状态保存在对象的头文件中,以32位的JDK为例:

不同于ReentratLock锁,这些锁都是概念上的,它们都是JDK1,6中为了了对synchronized关键字进行优化而产生的的锁机制。这些锁的启动与关闭策略都可以通过设定JVM启动参数来设置,当然,一般情况下使用JVM默认的策略就可以了。

轻量级锁和重量级锁的区别

偏向锁

偏向锁指在运行过程中,一个对象的锁偏向某个线程。即在开启偏向锁机制情况下,一个线程获得锁,当该线程下次需要获得锁时,不需要再获得锁(即忽略synchronized关键词),直接就可以执行同步代码,适用于竞争较少的情况。

轻量级锁

作为偏向锁的升级,在无多线程竞争的情况下,使用轻量级锁就能够最大化减少性能消耗,但是有个缺点,一旦多个线程同时竞争锁时,轻量级锁就会膨胀,成为重量级锁。

重量级锁

即当当前锁被其他线程占用时,当前的线程会进入阻塞状态。

锁区别

轻量级锁和重量级锁的区别

以上就是今天的全部内容了,锁的实现是java解决并发的最常用手段之一,如果还想要了解更多锁机制相关java入门知识,就请持续关注奇Q工具网吧。

推荐阅读:

synchronized底层原理都有哪些?

synchronized意思是什么?是什么意思?

synchronized的用法有哪些?synchronized使用方法详解