锁的概述

  • 乐观锁与悲观锁

           悲观锁指对数据被外界修改持保守态度,认为数据很容易被其他线程修改,在数据被处理前先对数据加锁。悲观锁的实现往往依靠于数据库提供的锁机制,即在数据库中,在对数据记录操作前给记录加入排他锁。若获取锁成功,则对记录进行操作,然后提交事务后释放排他锁。

        乐观锁认为数据在一般情况下不会造成冲突,所以在访问记录前不会加排他锁,而是在数据提交更新时,才会对数据冲突  与否进行检测。乐观锁并不会使用数据库提供的锁机制,一般在表中添加version字段或使用业务状态来实现。乐观锁直到提交         时才锁定,不会产生死锁。

  • 公平锁与非公平锁

       公平锁表示线程获取锁的顺序是按照请求锁的时间早晚来决定的,也就是最早请求锁的线程最早获取到锁。而非公平锁先来不一定先得。

      ReentrantLock提供了公平和非公平锁的实现

      公平锁:ReentrantLock lock = new ReentrantLock(true)

      非公平锁:ReentrantLock lock = new ReentrantLock(false)

尽量使用非公平锁,因为公平锁会带来性能开销


  • 独占锁与共享锁

       根据锁只能被单个线程持有还是能被多个线程共同持有,锁可以分为独占锁和共享锁。独占锁保证任何时候都只有一个线程能得到锁,ReentrantLock就是以独占方式实现的。共享锁则可以同时由多个线程持有,例如ReadWriteLock读写锁,允许一个资源可以被多线程同时进行读操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值