下面要给大家介绍的就是和java锁相关的内容,那么你知道在java当中,有多少种锁吗?java的锁有哪几种呢?下面一起来详细的进行了解吧!
一、java中都有哪些锁?
总的来讲的话,java当中有以下几种锁。
1、乐观锁和悲观锁
乐观锁:当一个线程去拿数据时,乐观锁认为不会有其他的线程对数据进行修改,所以不会上锁。
悲观锁:当一个线程去拿数据的时候,悲观锁认为一定会有其他的线程对数据进行修改,所以在这样的情况之下,线程在拿数据的时候都会加锁,当别的线程在这个时候想要去拿这个数据的时候,就会发生阻塞。
2、公平锁和非公平锁
公平锁:多个线程相互竞争时要排队,多个线程依照申请锁的顺序来获取锁。
非公平锁:多个线程相互竞争的时候,会插队,插队失败的时候,再排队。
3、分段锁
分段锁:它并不是具体的一种锁,只是一种锁的设计。
它的目的是将锁的粒度细化,在操作不需要对整个数组进行更新时,就仅仅针对数组当中的一项进行加锁操作。
4、独享锁和共享锁
独享锁:这种锁一次只可以被一个线程所持有。
共享锁:这种锁能够被多个线程所持有。
5、互斥锁和读写锁
读写锁:具体实现为读写锁ReadWriteLock。
6、锁升级(无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁)
JDK 1.6为了可以减少获得锁以及释放锁所带来的性能消耗,在JDK 1.6里引入了4种锁的状态:无锁、偏向锁、轻量级锁和重量级锁。
它会随着多线程的竞争情况逐渐升级,可是不能够降级。
7、可重入锁
可重入锁:对于同一个线程在外层方法获取锁时,在进入内层方法的时候也会自动获取锁。
以上的内容就是对于java锁的种类的简单介绍了,你都了解了吧!