Java所有的锁

Java 中所有的锁

悲观锁

认为一定有其他线程操作共享资源,一定在要操作同步资源前加锁,sychronized 关键字和 lock 实现类都是属于悲观锁。

乐观锁

认为没有其他线程在操作同步资源,在修改同步资源时再判断是否有其他线程修改过同步资源。没有的话直接修改,有的话就采用其他措施不如报错或者重试。

公平锁

线程到了之后会排队获取锁,优点是:线程不会饿死。缺点是 CPU 的吞吐效率不高。

非公平锁

线程到了之后先尝试获取锁,获取不到再排队,优点是:提高了 CPU 的吞吐效率,减少了 CPU 切换线程状态的次数。缺点:线程可能饿死。

非公平锁的效率比较快,因为如果是公平锁,每一次获取锁就要唤醒一个线程,CPU 切换线程状态是比较耗时的,会消耗 CPU 的资源

非公平锁,线程一到先获取锁,而不是先堵塞,这样有几率减少 CPU 的切换线程状态的次数,减少 CPU 的压力。

可重入锁

在外层获取锁的线程,在内层中还可以继续获取相同对象的锁。sychronized 关键字与 Lock 实现类属于可重入锁。

不可重入锁

反之,在外层获取锁的线程,不可在内层中继续获取相同对象的锁。

自旋锁

在尝试获取锁失败后,线程不会阻塞,通过自旋尝试继续获取锁,等待锁的释放。可以减少 CPU 进行线程状态的切换而造成的CPU耗时时间。但是如果自旋时间太久的话,因为线程是一直占用 CPU 时间的,会造成 CPU 浪费。

独享锁与共享锁

独享锁,只有一个线程可以获取,一般为写锁。

共享锁,多个线程可以获取,一般为读锁。

ReenTrantReaderWriteLock 中的 ReadLock 是独享锁,WriteLock 是共享锁。

大家好,我是小辉,持续分享,正在应届找工作中。。。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java编程小辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值