摘要: 1. 通过二级唯一索引更新聚簇索引 表结构如下: CREATE TABLE `test_lock_cluster` ( `id` int NOT NULL, `age` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `age` (`age`) ) 阅读全文
posted @ 2021-06-05 17:01 纳兰小依 阅读(961) 评论(0) 推荐(0) 编辑
摘要: RateLimiter是Guava包提供的限流器,采用了令牌桶算法,特点是均匀地向桶中添加令牌,每次消费时也必须持有令牌,否则就需要等待。应用场景之一是限制消息消费的速度,避免消息消费过快而对下游的数据库造成较大的压力。 本文主要介绍RateLimiter的源码,包括基本限流器SmoothBurst 阅读全文
posted @ 2021-03-14 14:37 纳兰小依 阅读(459) 评论(1) 推荐(0) 编辑
摘要: 1.线程池简介 使用线程池,一般会使用JDK提供的几种封装类型,即: 、`newSingleThreadExecutor newCachedThreadPool Executors`类中,来看看相关的源码: 这些方法内部都使用了 的构造方法,区别只是传入的参数不同。 有四个重载的构造方法,最终调用的 阅读全文
posted @ 2020-04-16 17:58 纳兰小依 阅读(543) 评论(0) 推荐(1) 编辑
摘要: `ReentrantReadWriteLock ReentrantLock ReentrantReadWriteLock ReentrantReadWriteLock`更加复杂一些。 1.核心字段与构造器 通过 和`WriteLock Sync AbstractQueuedSynchronizer( 阅读全文
posted @ 2020-03-22 16:29 纳兰小依 阅读(291) 评论(0) 推荐(0) 编辑
摘要: `ReentrantLock`是一种可重入锁,可重入是说同一个线程可以多次获取同一个锁,内部会有相应的字段记录重入次数,它同时也是一把互斥锁,意味着同时只有一个线程能获取到可重入锁。 1.构造函数 提供了两个构造函数,构造函数只是用来初始化 字段,可以看到,默认情况下 使用的是非公平锁,当然,也可以 阅读全文
posted @ 2020-03-17 00:37 纳兰小依 阅读(475) 评论(1) 推荐(0) 编辑
摘要: `CyclicBarrier CyclicBarrier CountDownLatch CyclicBarrier CyclicBarrier ReentrantLock`,主要方法在执行时都会加锁,因此并发性能不是很高。 1.相关字段 需要注意的是 字段,用于标记栅栏当前处在哪一代。当满足一定的条 阅读全文
posted @ 2020-03-13 00:58 纳兰小依 阅读(318) 评论(0) 推荐(0) 编辑
摘要: `ThreadLocal ThreadLocal`内存泄漏的面试题,居然完全不知道是怎么回事,痛定思痛,发现了解问题的本质还是需要从源码看起。 可以保存一些线程私有的数据,从而避免多线程环境下的数据共享问题。 存储数据的功能是通过 实现的,这是 的一个静态内部类。 源码加注释总共 多行, 就占据了接 阅读全文
posted @ 2020-03-06 19:58 纳兰小依 阅读(571) 评论(0) 推荐(0) 编辑
摘要: `CountDownLatch CountDownLatch AbstractQueuedSynchronizer AQS CountDownLatch AQS`,逻辑有些绕,要理清中间的逻辑稍微要费一些时间。 1.内部类Sync 的核心功能是通过内部类 实现的,这个类继承了 : 2.构造器 只有一 阅读全文
posted @ 2020-03-01 20:48 纳兰小依 阅读(461) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap源码探究 (JDK 1.8) 阅读全文
posted @ 2020-02-28 21:05 纳兰小依 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 1.模式简介 备忘录模式能够在不破坏封装性的前提下,实现对象状态的保存和恢复工作,又叫快照模式或Token模式。保存对象的状态是为了以后在需要的时候快速恢复到保存时的状态,因此常用在备份、撤销操作上,例如编辑器里的撤销、游戏里的存档和悔棋等功能。 备忘录模式有三个组成部分: Originagor(发 阅读全文
posted @ 2019-12-01 23:56 纳兰小依 阅读(670) 评论(2) 推荐(1) 编辑