![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 93
我是小水杯
坚持就是胜利
展开
-
happen-before原则解读
目录1.基本概述1.1 为什么要happen-before原则1.2 happen-before原则定义2.规则解读2.1 程序顺序规则2.2 监视器锁规则2.3 volatile变量规则2.4 传递性规则2.5 线程启动规则2.6 线程中断规则1.基本概述1.1 为什么要happen-before原则由于多线程编程时,线程并不直接操作主内存,所以会存在缓存不一致的问题(可见性问题)。为了解决这个问题,想要我们在编写程序的时候非常小心,而编写多线程程序时我们需要注意的地方就非常多。java设计者也考虑原创 2021-06-11 22:22:52 · 1772 阅读 · 0 评论 -
JUC-CopyOnWriteArrayList
jdk版本: 1.8更多数据结构,算法,设计模式,源码分析等请关注我的微信公众号[技术寨],每周至少两篇优质文章目录1.设计思想解决方式1.基本概述1.1 继承关系1.2 主要属性1.3 主要方法2. 核心方法图解2.1 添加元素2.2 获取元素2.3 删除元素2.4 特殊方法-不存在添加addIfAbsent3.简单的迭代器4.优点和缺点4.1 优点4.2 缺点5.面试必知5.1 CopyOnWriteArrayList是如何扩容的5.2 CopyOnWriteArraySet实现方法1.设计思.原创 2021-06-09 22:23:54 · 245 阅读 · 2 评论 -
CAS机制
1.引入为了说明CAS机制,需要先介绍一下悲观锁和乐观锁。1.1 悲观锁总是假设最坏的情况,每次操作数据之前都会先上锁,后面想要取数据就会被阻塞。在java中通过synchronized同步原语来实现悲观锁。悲观锁存在的问题:在多线程环境下,在等待锁,释放锁时会存在线程的上下文切换导致性能下降。1.2 乐观锁总是假设最好的情况,每次操作数据之前都不会上锁,在更新时判断数据是否已经是否已经被更新。其常见的一种实现方式就是今天的主角:CAS。2.CAS2.1 三个操作数内存地址 V旧的预期原创 2021-06-02 08:53:46 · 322 阅读 · 1 评论 -
JUC-atomic
jdk版本: 1.81.概念juc的atomic是jdk1.5引入的,完整的包名是:java.util.concurrent.atomic,通过这些类可以帮助我们完成一些原子性的操作。不过它没有像synchronizd那样保证一段代码的原子性,它只能保证一个变量的原子性操作。synchronizd也能保证一个变量的原子性,为什么不用它呢?当然是性能问题,通过使用atomic包下的类来替代synchronizd,可以保证更好的性能。口说无凭,我们来测试一下:@BenchmarkMode(Mode.原创 2021-05-31 23:11:24 · 215 阅读 · 0 评论 -
Unsafe
1. 介绍Unsafe顾名思义它是一个“不安全”的类,但是仍有很多框架(比如:Netty、Hadoop、Kafka等)喜欢使用它,为什么呢?因为它是直接和系统打交道,执行效率会比较高。但是它的很多方法都是很偏向底层的,一般人使用可能会对系统造成不好的影响,所以java官方不推荐使用这个类。但是不影响我们分析这个类,并且它也是分析并发的基础。2. 源码分析public final class ...原创 2019-04-11 21:58:08 · 200 阅读 · 0 评论