Synchronized和锁的分类

本文探讨了Synchronized关键字背后的锁思想,包括公平锁/非公平锁、可重入锁、独享锁/共享锁、悲观锁/乐观锁以及Synchronized的偏向锁、轻量级锁和重量级锁的概念。Synchronized作为非公平、可重入和独享的悲观锁,其在Java 5后引入了锁升级机制以提升性能。
摘要由CSDN通过智能技术生成

Synchronized关键字大家都模式,这篇我总结的不在于其运用,而在于锁的思想。

1.公平锁/非公平锁

公平锁是指多个线程按照申请锁的顺序来获取锁。
非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。

Synchronized是非公平锁。

2.可重入锁

可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。

Synchronized是可重入锁。

3.独享锁和共享锁

独享锁是指该锁一次只能被一个线程所持有。
共享锁是指该锁可被多个线程所持有。

Synchronized是独享锁。

4.乐观锁/悲观锁

悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。
乐观锁则认为对于同一个数据的并发操作,是不会发生修改的。在更新数据的时候,会采用尝试更新,不断重新的方式更新数据。乐观的认为,不加锁的并发操作是没有事情的。

Synchronized是悲观锁。

 

下面说一个Synchronized独有的:偏向锁/轻量级锁/重量级锁

JDK5对Synchronized进行了改进。

这三种锁是指锁的状态,并且是针对Synchronized。在Java 5通过引入锁升级的机制来实现高效Synchronized。这三种锁的状态是通过对象监视器在对象头中的字段来表明的。
偏向锁是指一段同步代码一直被一个线程所访问,那么该线程会自动获取锁。降低获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值