并发专题
文章平均质量分 69
主要分享并发相关的知识
大伟攀高峰
东方欲晓,莫道君行早,踏遍青山人未老,风景这边独好
展开
-
深入理解并发之AtomicReference类
通过AtomicReference的源码可知,最终保证原子操作的是unsafe.getAndSetObject(this, valueOffset, newValue)。由于getAndSetObject是native方法,我需要看下JVM中该方法的实现原理。 上篇文章主要分享了基本封装类型的原子类,例如 AtomicInteger,AtomicBoolean,AtomicLong等。那么对象的原子操作如何实现?假设,我们现在要对用户进行银行卡转账操作并保证转账的安全性。原创 2024-06-04 16:16:44 · 457 阅读 · 0 评论 -
深入理解并发之LongAdder、DoubleAdder的实现原理
答案是否定的。那么 @sun.misc.Contended 注解就是将该变量数据强制刷到不同的缓存行中。通过阅读DoubleAdder的代码之后,你会发现DoubleAdder和LongAdder的代码几乎一样,所以两者的原理都是一样的,这里就不对DoubleAdder 的代码一行行注释了,大家自行阅读。那么我们是不是可以思考一下,将int数据进行打散,分成若干个值,分别计算,最好将值进行汇总。 根据缓存行的长度,变量不足长度的数据,进行强制填充。原创 2024-06-04 16:15:51 · 395 阅读 · 0 评论 -
深入理解并发原理之原子类
上文说到,CPU层次,OS层次,都已经解决了并发问题。都是采用了原子操作指令。下面我们通过Java语言的Atomic原子类,看下Java语言是如果做到原子操作的。原创 2024-05-30 08:51:33 · 499 阅读 · 0 评论 -
深入理解并发问题的产生原因和解决方案
这个时候,进入等待队列,也需要进行竞争(多个线程没有获取成功),所有,需要对队列的tail指针进行加锁,加锁成功,进入阻塞队列,加锁失败,进行自旋,一直能够加锁成功,进入队列。之前加锁成功,执行完代码之后,会唤醒阻塞队列中的线程,让阻塞队列中的线程重新进行标志位加锁,循环往复,直到执行完代码,线程销毁。这些并发问题就能完美解决。上面对控制总线加锁的方案,确实能够解决并发问题,但是又引入另外一个问题,性能问题: 控制总线是整个系统的资源,同一时间只能有一个CPU使用该资源,多核CPU就变得无意义了。原创 2024-05-30 08:50:52 · 618 阅读 · 0 评论