![](https://img-blog.csdnimg.cn/ebc6756d66cc446493599655afaa77a7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 67
并发编程底层原理和技术
【非典型Coder】
混迹IT行业十来年,拧过螺丝做过架构,当过讲师,闲暇之余写写文章~
展开
-
J.U.C——CyclicBarrier 实现原理
1. 通过 generation 来实现循环使用,每一轮结束后,都会重置 generation;2. CyclicBarrier 底层和 CountDownLatch 一样是基于 AQS 实现的;3. CyclicBarrier 不需要代码手动移除(trip)屏障,线程数量达到(count==parties)自动触发。原创 2024-02-20 14:42:00 · 75 阅读 · 0 评论 -
J.U.C——CountDownLatch 的实现原理
1. 调用await 方法的线程处于 WATING 状态,虽然源码中说是 "block";2. 等待线程和任务线程通过核心方法 wait 和 countDown 来协调工作,完成特定场景需求。原创 2024-02-20 11:12:20 · 60 阅读 · 0 评论 -
HashMap 死循环
1. 死循环的问题根本原因是多个线程操作(准确地说是修改)同一条链表,导致链表循环,其他线程读取的时候就会发生死循环。2. 虽然 1.8 扩容时链表改成了尾插法,但是仍然无法保证多线程数据安全,毕竟 HashMap 本身就不是线程安全的。原创 2023-12-25 15:59:59 · 392 阅读 · 0 评论 -
Redis 实现分布式锁
什么是分布式锁已经在之前的文章介绍过了,不明白的同学请回头阅读。这篇文章开始介绍分布式锁的具体实现。实现方式有很多,今天介绍如何通过 redis 来实现。今天介绍最基本的通过 setnx命令来实现,当然还有基于 redis 开源的第三方实现,比如 redisson.SETNXset if not exist,如果 key 不存在,设置指定的值并返回 1,否则不做任何操作返回 0,整个过程是原子操作。通过该命令来实现锁时需要考虑多线程并发带来的异常情况,比如上一次程序中断导致锁没有释放、死原创 2022-03-23 14:04:30 · 1261 阅读 · 0 评论 -
JMM 内存操作指令
上篇文章里提到了 read/load/store/write 等指令,这些指令原创 2021-12-16 09:29:36 · 352 阅读 · 0 评论 -
MESI 协议
概念MESI 协议是高速缓存一致性协议,是为了解决多 cpu 、并发环境下,多个 cpu 缓存不一致问题而提出的协议。 缓存行在任何时刻一定处于四个状态之一:Modified: 缓存行已经被修改,但是没有被写回主存;Exclusive: 缓存行与主存相同,并且是主存的唯一拷贝;Shared: 和主存系统,可能也存在于其他的缓存中,并不是主存的唯一拷贝;Invalid: 缓存行无效特点MESI 是一种基于回写(write-back)、缓存无效化(invalidate)的协议。.原创 2021-12-06 17:10:32 · 3845 阅读 · 1 评论