Java中的锁

在这里插入图片描述

悲观锁与乐观锁

  • 悲观锁:认为数据很容易被其他线程修改 ,在对数据处理前先对数据进行加锁,在整个数据处理过程中数据处于锁定状态。
  • 乐观锁:乐观锁是相对于悲观锁来说的,它认为数据一般不会造成冲突,只在数据更新时,才对数据冲突与否做检测。

公平锁与非公平锁(先来后到锁)

  • 公平锁:ReentrantLock pairLock = new ReentrantLock(true);
  • 非公平锁:ReentrantLock pairLock = new ReentrantLock(false);
  • 构造器不传参,则默认是非公平锁
  • 假设线程A已经持有锁,这时候线程B请求该锁其将会被挂起。当线程A释放锁后,加入当前有线程C也需要获取该锁,如果这时候采用非公平锁,则跟据线程调度策略,线程B和线程C两者之一可能获取锁,这时候不需要其他干涉,而如果使用公平锁,C会挂起,B获取当前锁。

独占锁与共享锁

  • 独占锁保证任何时候都只有一个线程能得到锁,ReenactmentLock就是以独占锁方式实现。
  • 共享锁可以同时由多个线程持有,例如ReadWriteLock读写锁,它运行一个资源可以被多线程同时读操作。
  • 独占锁是一种悲观锁
  • 共享锁是一种乐观锁

自旋锁(锁坚强)

  • 当前线程在获取锁时,如果发现锁已经被其他线程占有,他不会立马阻塞自己,在不放弃CPU使用权的情况下,多次尝试获取(默认次数是10,可以使用-XX:PreBlockSpinsh参数设置该值),很有可能在后面几次尝试中其他线程已经释放了锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值