图解Java中那18 把锁

7d113a6e72f77d503abd0b15a34ea5ba.png

若有收获,请记得分享和转发哦

  • 乐观锁和悲观锁

  • 独占锁和共享锁

  • 互斥锁和读写锁

  • 公平锁和非公平锁

  • 可重入锁

  • 自旋锁

  • 分段锁

  • 锁升级(无锁|偏向锁|轻量级锁|重量级锁)

  • 锁优化技术(锁粗化、锁消除)

乐观锁和悲观锁

悲观锁

悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。

举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。

回到代码世界中,一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程也可能会操作这个数据,所以每次操作前都会上锁,这样其他线程想操作这个数据拿不到锁只能阻塞了。

7f6d5cb70f399d96b1fcf1f558463645.png

在 Java 语言中 synchronized 和 ReentrantLock等就是典型的悲观锁,还有一些使用了 synchronized 关键字的容器类如 HashTable 等也是悲观锁的应用。

c4ba8eac4a3cc0367aa20a2e2a22dee1.png

9612248872aaeb8b7920e54c47da104d.png

a16f7e8ffc86f5f8e2de8cd7e347da87.png

ef4e58663721e2db03d77e1d4cbf2726.png

cc83d2b8667f02713e2957fb7a475074.png

e289f14059336a7f71e2c1f96be367b9.png

1cd990d53afdc6eddd0af08cccebf7ad.png

dcf0fbf8189b1aea3e71ba3af58e8a7e.png

a13c279a0cad3f58f55268a91c60c93a.png

07bcc6a2e0be425da49ec840a3d20966.png

ff5031e874f87ddc6bd7077401c9731d.png

f54c55bc0bd8f812ff725ecf2e0b5567.png

78d87983f6706b868308008965727c3c.png

1e1dd0ea7d073dc9671b4604f64a97c4.png

aee0bcdbffda4f6159c64c526b977a1e.png

d58fd9143cdb7dd601a4fff3d0f968d6.png

b4d83f4f85d209184393a7c96b66fb0d.png

一张图总结:

前面讲了 Java 语言中各种各种的锁,最后再通过六个问题统一总结一下:

d1a7c7b022aa3f18fa60e9d695fc2bfa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值