
并发专题
文章平均质量分 76
主要分享并发相关的知识
大伟攀高峰
东方欲晓,莫道君行早,踏遍青山人未老,风景这边独好
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解ReentrantLock源码
1、可重入是指同一个线程可以多次获取同一把锁。例如,在一个方法中获取了锁,然后在这个方法内部调用了另一个也需要获取该锁的方法,此时线程可以成功获取锁,而不会被阻塞。这就好比一个人有一把自己房间的钥匙,他可以多次进入自己的房间,每次进入相当于线程对锁的一次获取。2、是独占锁,在同一时刻,只有一个线程可以获取该锁。当一个线程获取了锁之后,其他线程如果也想获取这把锁,就会被阻塞,直到锁被释放。这就像是一个只有一个入口的房间,一次只能有一个人进入。3、 它通过一个内部的同步器(原创 2025-03-26 21:47:19 · 899 阅读 · 0 评论 -
Java 中的各种锁
Java 中我们经常听到各种锁,例如悲观锁,乐观锁,自旋锁等等。今天我们将 Java 中的所有锁放到一起比较一下,并分析各自锁的特点,让大家能够快捷的理解相关知识。原创 2024-12-29 17:45:59 · 895 阅读 · 0 评论 -
ThreadLocal 详解
ThreadLocal是一个将在多线程中为每个线程创建单独的变量副本的类。当使用 ThreadLocal来维护变量时,ThreadLocal 会为每个线程创建单独的变量副本,避免因多线程操作共享变量而导致的数据不一致情况。原创 2024-12-26 10:05:14 · 441 阅读 · 0 评论 -
深入理解并发之AtomicReference类
通过AtomicReference的源码可知,最终保证原子操作的是unsafe.getAndSetObject(this, valueOffset, newValue)。由于getAndSetObject是native方法,我需要看下JVM中该方法的实现原理。 上篇文章主要分享了基本封装类型的原子类,例如 AtomicInteger,AtomicBoolean,AtomicLong等。那么对象的原子操作如何实现?假设,我们现在要对用户进行银行卡转账操作并保证转账的安全性。原创 2024-06-04 16:16:44 · 642 阅读 · 0 评论 -
深入理解并发之LongAdder、DoubleAdder的实现原理
答案是否定的。那么 @sun.misc.Contended 注解就是将该变量数据强制刷到不同的缓存行中。通过阅读DoubleAdder的代码之后,你会发现DoubleAdder和LongAdder的代码几乎一样,所以两者的原理都是一样的,这里就不对DoubleAdder 的代码一行行注释了,大家自行阅读。那么我们是不是可以思考一下,将int数据进行打散,分成若干个值,分别计算,最好将值进行汇总。 根据缓存行的长度,变量不足长度的数据,进行强制填充。原创 2024-06-04 16:15:51 · 494 阅读 · 0 评论 -
深入理解并发原理之原子类
上文说到,CPU层次,OS层次,都已经解决了并发问题。都是采用了原子操作指令。下面我们通过Java语言的Atomic原子类,看下Java语言是如果做到原子操作的。原创 2024-05-30 08:51:33 · 564 阅读 · 0 评论 -
深入理解并发问题的产生原因和解决方案
这个时候,进入等待队列,也需要进行竞争(多个线程没有获取成功),所有,需要对队列的tail指针进行加锁,加锁成功,进入阻塞队列,加锁失败,进行自旋,一直能够加锁成功,进入队列。之前加锁成功,执行完代码之后,会唤醒阻塞队列中的线程,让阻塞队列中的线程重新进行标志位加锁,循环往复,直到执行完代码,线程销毁。这些并发问题就能完美解决。上面对控制总线加锁的方案,确实能够解决并发问题,但是又引入另外一个问题,性能问题: 控制总线是整个系统的资源,同一时间只能有一个CPU使用该资源,多核CPU就变得无意义了。原创 2024-05-30 08:50:52 · 839 阅读 · 0 评论