美文网首页Java
聊聊分布式锁那些事(一)

聊聊分布式锁那些事(一)

作者: 小吴不睡觉 | 来源:发表于2020-09-30 16:18 被阅读0次

首先让我们关注下面几个问题:

  • 为什么需要锁?
  1. 多任务环境对同一共享资源进行读写操作
  2. 对资源的访问是互斥的
  • 锁的生命周期?
  1. 竞争锁
  2. 占有锁
  3. 任务阻塞
  4. 释放锁
  • 什么是Lock锁?
  1. Lock是一个类,通过这个类可以实现同步访问
  2. Lock是JDK5后才出现的类
  3. Lock在JUC包下有很多实现类,主要的实现类是ReentrantLock(可重入锁)
  4. Lock给我们提供了5个重要的方法:unlock(释放锁)、lock(加锁)、tryLock(获取空闲状态下的锁,可以响应中断)、newCondition(获取绑定此 Lock 实例的Condition 实例,用于控制多线程之间的、基于该状态的条件等待)、lockInterruptibly(如果当前线程未被中断,则获取锁,可以响应中断)
Lock获取锁的几种方式:
    Lock lock = new ReentrantLock();
        lock.lock();
        try {
            //处理事务
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放锁
            lock.unlock();
        }
    Lock lock = new ReentrantLock();
        if (lock.tryLock()) {
            try {
                //处理事务
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //释放锁
                lock.unlock();
            }
        }
  public static void main(String[] args) throws InterruptedException {
        Lock lock = new ReentrantLock();
        lock.lockInterruptibly();
        try {
            //处理事务
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放锁
            lock.unlock();
        }
    }
  • 什么是ReentrantLock?

ReentrantLock是基于AQS实现的
ReentrantLock根据传入构造方法的布尔型参数实例化出Sync的实现类FairSync和NonfairSync,分别表示公平的Sync和非公平的Sync

  • Lock和Synchronized的区别?
  1. Lock可使用的场景更多,更灵活
  2. Synchronized是隐式锁,Lock是显示锁,即Lock需要手动释放锁,如果不释放锁可能会出现死锁(如果没有解锁,在程序正常运行中,线程正常退出后也会释放锁),而Synchronized不需要
  3. Synchronized是不可中断的,除非抛出异常或者正常运行完成,而Lock可以中断的。中断方式:①调用设置超时方法tryLock(long timeout ,timeUnit unit) ②调用lockInterruptibly()放到代码块中,然后调用interrupt()方法可以中断
  4. Synchronized:非公平锁,Lock:可设置非公平锁与公平锁,在其构造方法的时候可以传入boolean值(true:公平锁,false:非公平锁),默认是非公平锁

相关文章

  • 聊聊分布式锁那些事(一)

    首先让我们关注下面几个问题: 为什么需要锁?多任务环境对同一共享资源进行读写操作对资源的访问是互斥的 锁的生命周期...

  • java锁的概念

    参考文档探究分布式并发锁并发编程-锁的发展和主流分布式锁比较总结从构建分布式秒杀系统聊聊分布式锁探索并发编程(六)...

  • 面试必问:如何实现Redis分布式锁

    摘要:今天我们来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。 Redis分布式锁的实现原理 一...

  • 使用etcd分布式锁做主备切换

    利用etcd事务机制可以实现分布式锁,利用分布式锁可以做主备切换功能。Etcd分布式锁实现方式如下:利用etcd事...

  • 聊聊分布式事务

    这次使用分布式事务框架过程中了学习了一些分布式事务知识,所以本文我们就来聊聊分布式事务那些事。首先我们先回顾下什么...

  • 分布式锁

    为什么要用分布式锁 数据库乐观锁redis分布式锁zookeeper分布式锁 使用分布式锁的场景 实现分布式锁的方...

  • 聊聊 Redis 分布式锁

    0. 前言 Redis 是日常开发中经常使用到的中间件,以优秀的性能著称。但是 Redis 分布式锁可以说是饱受争...

  • 什么是分布式锁?几种分布式锁分别是怎么实现的?

    一、什么是分布式锁: 1、什么是分布式锁: 分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资...

  • Redis实现分布式锁

    分布式下的分布式锁一般实现有三种: 基于数据库的乐观锁 基于redis的分布式锁 基于zookeeper的分布式锁...

  • 大佬浅谈分布式锁

    redis 实现 redis 分布锁一、redis 实现分布式锁(可重入锁)redission 实现分布式锁1、对...

网友评论

    本文标题:聊聊分布式锁那些事(一)

    本文链接:https://www.haomeiwen.com/subject/livuuktx.html