并发编程
文章平均质量分 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 · 2151 阅读 · 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 · 389 阅读 · 2 评论 -
CAS机制
1.引入 为了说明CAS机制,需要先介绍一下悲观锁和乐观锁。 1.1 悲观锁 总是假设最坏的情况,每次操作数据之前都会先上锁,后面想要取数据就会被阻塞。在java中通过synchronized同步原语来实现悲观锁。 悲观锁存在的问题:在多线程环境下,在等待锁,释放锁时会存在线程的上下文切换导致性能下降。 1.2 乐观锁 总是假设最好的情况,每次操作数据之前都不会上锁,在更新时判断数据是否已经是否已经被更新。其常见的一种实现方式就是今天的主角:CAS。 2.CAS 2.1 三个操作数 内存地址 V 旧的预期原创 2021-06-02 08:53:46 · 441 阅读 · 1 评论 -
JUC-atomic
jdk版本: 1.8 1.概念 juc的atomic是jdk1.5引入的,完整的包名是:java.util.concurrent.atomic,通过这些类可以帮助我们完成一些原子性的操作。不过它没有像synchronizd那样保证一段代码的原子性,它只能保证一个变量的原子性操作。synchronizd也能保证一个变量的原子性,为什么不用它呢?当然是性能问题,通过使用atomic包下的类来替代synchronizd,可以保证更好的性能。 口说无凭,我们来测试一下: @BenchmarkMode(Mode.原创 2021-05-31 23:11:24 · 324 阅读 · 0 评论 -
Unsafe
1. 介绍 Unsafe顾名思义它是一个“不安全”的类,但是仍有很多框架(比如:Netty、Hadoop、Kafka等)喜欢使用它,为什么呢?因为它是直接和系统打交道,执行效率会比较高。但是它的很多方法都是很偏向底层的,一般人使用可能会对系统造成不好的影响,所以java官方不推荐使用这个类。但是不影响我们分析这个类,并且它也是分析并发的基础。 2. 源码分析 public final class ...原创 2019-04-11 21:58:08 · 279 阅读 · 0 评论
分享