下面要给大家介绍的就是和java锁相关的内容,那么你知道在java当中,有多少种锁吗?java的锁有哪几种呢?下面一起来详细的进行了解吧!

一、java中都有哪些锁?

总的来讲的话,java当中有以下几种锁。

1、乐观锁和悲观锁

乐观锁:当一个线程去拿数据时,乐观锁认为不会有其他的线程对数据进行修改,所以不会上锁。

悲观锁:当一个线程去拿数据的时候,悲观锁认为一定会有其他的线程对数据进行修改,所以在这样的情况之下,线程在拿数据的时候都会加锁,当别的线程在这个时候想要去拿这个数据的时候,就会发生阻塞。

2、公平锁和非公平锁

公平锁:多个线程相互竞争时要排队,多个线程依照申请锁的顺序来获取锁。

非公平锁:多个线程相互竞争的时候,会插队,插队失败的时候,再排队。

3、分段锁

分段锁:它并不是具体的一种锁,只是一种锁的设计。

它的目的是将锁的粒度细化,在操作不需要对整个数组进行更新时,就仅仅针对数组当中的一项进行加锁操作。

4、独享锁和共享锁

独享锁:这种锁一次只可以被一个线程所持有。

共享锁:这种锁能够被多个线程所持有。

5、互斥锁和读写锁

读写锁:具体实现为读写锁ReadWriteLock。

6、锁升级(无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁)

JDK 1.6为了可以减少获得锁以及释放锁所带来的性能消耗,在JDK 1.6里引入了4种锁的状态:无锁、偏向锁、轻量级锁和重量级锁。

它会随着多线程的竞争情况逐渐升级,可是不能够降级。

7、可重入锁

可重入锁:对于同一个线程在外层方法获取锁时,在进入内层方法的时候也会自动获取锁。

以上的内容就是对于java锁的种类的简单介绍了,你都了解了吧!