加载中
SpringBoot 使用转换器将前端参数转换为枚举

前言 最近遇到一个小伙伴问前端枚举转换问题,才意识到可以通过转换器(Converter)自动将前端传入的字段值使用枚举接收。 我自己捣鼓了一番,现在记录笔记分享一下!有兴趣的小伙伴可以自己...

MyBatis-Plus 中 Mapper 重载踩坑指南

前言 近期在 Mapper 中写了个方法重载,然后死活查不到正确结果,最终灵机一动,想到是不是因为重载,然后我 Shift + F6 把重载方法名字改了一下!结果,显而易见,重载的那个方法也一块改了...

并发场景加锁优化小技巧

前言 在 JDK 中有很多锁,包括 synchronized、ReentrantLock、ReentrantReadWriteLock、锁的使用场景也分很多种,下面看一下对加锁优化的小技巧。 以下内容为个人学习笔记。 并发修改标志位 ...

ZooKeeper 分布式锁 Curator 源码 05:分布式读写锁和联锁

前言 Curator 同样支持分布式读写锁[1] 和联锁[2],只需要使用 InterProcessReadWriteLock 即可,来一起看看它的源码以及实现方式。 1 使用方式 public class CuratorDemo { public static v...

依赖 jar 没有传递,导致找不到类文件而启动失败了

前言 最近频繁遇到找不到类文件错误。 Caused by: java.lang.NoClassDefFoundError:xxx 就这个家伙。 但是我本地启动服务是正常的,前前后后经历了 惊讶 -> 疑惑 -> 烦躁 -> 暴躁 -> 心塞 ->...

ZooKeeper 分布式锁 Curator 源码 02:可重入锁重复加锁和锁释放

前言 加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢? 1 锁重入 在上一小节中,可以看到加锁的过程,再回头看 internalLock 这个方法。 加锁成功之后,将当前线程放到 threadDa...

ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

前言 在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的? 1 并发加锁 先来看结果,在多线程对 /locks/lock_01 加锁时,是在后面又创建了新的临时节...

ZooKeeper 分布式锁 Curator 源码 04:分布式信号量和互斥锁

前言 分布式信号量,之前在 Redisson 中也介绍过,Redisson 的信号量是将计数维护在 Redis 中的,那现在来看一下 Curator 是如何基于 ZooKeeper 实现信号量的。 1 使用 Demo public class Cu...

ZooKeeper 分布式锁 Curator 源码 01:可重入锁

前言 一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。 Curator 的锁也分为...

Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch

前言 Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch。 1 Semaphore 意思就是在分布式场景下,只有 3 个凭证,也就意味着同时只会有三个线程执行业务...

Redisson 分布式锁源码 08:MultiLock 加锁与锁释放

前言 基于 Redis 的 Redisson 分布式联锁 RedissonMultiLock 对象可以将多个 RLock 对象关联为一个联锁,每个 RLock 对象实例可以来自于不同的 Redisson 实例。 当然,这是官网的介绍,具体是...

Redisson 分布式锁源码 09:RedLock 红锁的故事

前言 RedLock 红锁,是分布式锁中必须要了解的一个概念。 所以本文会先介绍什么是 RedLock,当大家对 RedLock 有一个基本的了解。然后再看 Redisson 中是如何实现 RedLock 的。 在文章开头先...

07/05 09:00
0
Redisson 分布式锁源码 10:读写锁

前言 Redisson 还支持可重入读写锁,允许在分布式场景下,同时有多个读锁和一个写锁处于加锁状态。 1 使用读写锁 Redisson 读写锁实现了 JUC 下的 ReadWriteLock,使用方式基本相同。 2 源码...

Redisson 分布式锁源码 07:公平锁释放

前言 看门狗机制是在 RedissonBaseLock#scheduleExpirationRenewal 方法中,这块公平锁和非公平锁并无区别。 前文已经了解到,公平锁加锁失败之后,会将当前放到等待队列中,通过 Java 代码中...

Redisson 分布式锁源码 06:公平锁排队加锁

前言 在上一篇文章中已经分析过公平锁的加锁源码,并得出结论: Redis Hash 数据结构:存放当前锁,Redis Key 就是锁,Hash 的 field 是加锁线程,Hash 的 value 是 重入次数; Redis List 数...

Redisson 分布式锁源码 04:可重入锁释放

前言 前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。 当锁加锁成功之后,锁是如何释放的? 1 主动释放 源码入口:RedissonLock#unlock 在解锁时会获取当前线程的id。 一路往里跟...

Redisson 分布式锁源码 05:公平锁加锁

前言 默认的加锁逻辑是非公平的。 在加锁失败时,线程会进入 while 循环,一直尝试获得锁,这时候是多线程进行竞争。就是说谁抢到就是谁的。 Redisson 提供了公平锁机制,使用方式如下: RL...

Spring @Transactional 注解是如何执行事务的?

前言 相信小伙伴一定用过 @Transactional 注解,那 @Transactional 背后的秘密又知道多少呢? Spring 是如何开启事务的?又是如何进行提交事务和关闭事务的呢? 1 画图猜测 在开始 debug 阅读...

Spring @Transactional 注解是如何执行事务的?

前言 相信小伙伴一定用过 @Transactional 注解,那 @Transactional 背后的秘密又知道多少呢? Spring 是如何开启事务的?又是如何进行提交事务和关闭事务的呢? 1 画图猜测 在开始 debug 阅读...

Redisson 分布式锁源码 01:可重入锁加锁

前言 相信小伙伴都是使用分布式服务,那一定绕不开分布式服务中数据并发更新问题! 单系统很容易想到 Java 的各种锁,像 synchronize、ReentrantLock 等等等,那分布式系统如何处理? 当然是...

06/26 10:17
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部