![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
锁
老马啸西风
Github: https://github.com/houbb
Email:houbinbin.echo@gmail.com
展开
-
阻塞队列(1)java 7 种阻塞队列 BlockingQueue 介绍
一些值得思考的问题为什么要有阻塞队列?什么是阻塞队列优缺点适用场景实现思想+源码个人启发阻塞队列什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供.原创 2020-11-08 22:14:19 · 426 阅读 · 0 评论 -
java 实现跳表(skiplist)及论文解读
什么是跳跃表跳表由William Pugh发明。他在论文 《Skip lists: a probabilistic alternative to balanced trees》中详细介绍了跳表的数据结构和插入删除等操作。跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡,因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。为什么需要?性能比较好。实现相对于红黑树比较简单。占用更少的内存。论文解读为了学习第一手的资料,我们先学习一.原创 2020-11-02 21:46:49 · 1146 阅读 · 3 评论 -
面试经典 ConcurrentHashMap 源码你读过吗?
HashMap 的线程安全性HashMap 是线程不安全的。为了使用线程安全的数据结构,多线程条件下,可使用 Collections.synchronizedMap 方法构造出一个同步Map,或者直接使用线程安全的 ConcurrentHashMap。Java 7基于分段锁的ConcurrentHashMap注:本章的代码均基于JDK 1.7.0_67数据结构Java 7中的ConcurrentHashMap的底层数据结构仍然是数组和链表。与HashMap不同的是,ConcurrentHas原创 2020-10-29 23:38:20 · 511 阅读 · 0 评论 -
StampedLock 读写锁中的最强王者
StampedLock简介我们前面介绍了 ReentrantReadWriteLock可重入读写锁详解,不过 jdk1.8 引入了性能更好的 StampedLock 读写锁,我愿称之为最强!一种基于能力的锁,具有三种模式用于控制读/写访问。StampedLock的状态由版本和模式组成。锁定采集方法返回一个表示和控制相对于锁定状态的访问的印记; 这些方法的“尝试”版本可能会返回特殊值为零以表示获取访问失败。锁定释放和转换方法要求stamps作为参数,如果它们与锁的状态不匹配则失败。三种模式这.原创 2020-10-24 08:14:27 · 964 阅读 · 0 评论 -
ReentrantLock 可重入锁这样学,面试没烦恼,下班走得早
为什么需要 ReentrantLock ?既生 synchronized,何生 ReentrantLock?每一个接触过多线程的 java coder 肯定都知道 synchronized 关键字,那为什么还需要 ReentrantLock 呢?其实这就是 ReentrantLock 与 synchronized 对比的优势问题:(1)ReentrantLock 使用起来更来更加灵活。我们在需要控制的地方,可以灵活指定加锁或者解锁。这可以让加锁的范围更小,记住老马的一句话,更小往往意味着更快。.原创 2020-10-21 23:18:28 · 453 阅读 · 0 评论 -
工作 5 年了,竟然不知道 volatile 关键字?
“工作 5 年了,竟然不知道 volatile 关键字!”听着刚面试完的架构师一顿吐槽,其他几个同事也都参与这次吐槽之中。都说国内的面试是“面试造航母,工作拧螺丝”,有时候你就会因为一个问题被PASS。你工作几年了?知道 volatile 关键字吗?今天就让我们一起来学习一下 volatile 关键字,做一个在可以面试中造航母的螺丝工!volatileJava语言规范第三版中对 volatile 的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该原创 2020-10-20 21:13:47 · 391 阅读 · 0 评论 -
java 从零实现属于你的 redis 分布式锁
点赞再看,已成习惯。为什么需要分布式锁在 jdk 中为我们提供了加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。上一节我们已经对分布式锁原理进行了详细讲解,参见:red.原创 2020-10-17 21:24:42 · 487 阅读 · 0 评论 -
java 手写并发框架(二)异步转同步框架封装锁策略
序言上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java 手写并发框架(1)异步查询转同步的 7 种实现方式异步转同步的便利性实现方式循环等待wait & notify使用条件锁使用 CountDownLatch使用 CyclicBarrierFutureSpring EventListener上一节我们已经对上面的 7 种实现方式进行了详原创 2020-10-12 21:51:04 · 616 阅读 · 0 评论 -
面试官:谈一谈你对 redis 分布式锁的理解
为什么需要分布式锁在 jdk 中为我们提供了多种加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。锁的准则首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:.原创 2020-09-10 22:38:45 · 1152 阅读 · 0 评论