并发编程
文章平均质量分 95
一只奋斗的程序羊
这个作者很懒,什么都没留下…
展开
-
并发编程——从源码看AQS
目录 一、什么是AQS? 二、自定义的不可重入锁 自定义同步器 自定义锁 三、Reentrantlock原理 Reentrantlock的结构图 非公平锁加锁 解锁 非公平锁的体现 可重入原理 公平锁和非公平锁的区别 条件变量实现原理 一、什么是AQS? 全称是AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 用state属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获...原创 2021-08-09 15:58:10 · 284 阅读 · 0 评论 -
并发编程——线程池
目录 一、为什么要使用线程池 二、自定义线程池 自定义任务队列 自定义线程池管理器 拒绝策略接口 测试(任务生产者) 总结流程 三、线程池 ThreadPoolExecutor 线程池状态 线程池的工作状态 四、Executors 类 newFixedThreadPool(固定大小的线程池) newCachedThreadPool(带缓冲工厂的线程池) newSingleThreadExecutor(单线程的线程池) ...原创 2021-08-08 17:42:53 · 526 阅读 · 1 评论 -
并发编程——不可变类
一、日期转换问题 一般使用的最多的是SimpleDateFormat,但是因为是不可变类,在多个线程操作共享变量的时候内部的数据会改变,造成线程安全问题,接下来看一下测试案例。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < 10; i++) {//运行10个线程 new Thread(() -> { try {原创 2021-08-07 19:37:20 · 386 阅读 · 2 评论 -
并发编程——共享模型之无锁
目录 一、并发编程无锁案例 无锁高效率 二、CAS(compareAndSet) CAS和volatile的关系 CAS的特点 三、ABA问题 解决 四、CAS操作的原子类 原子整数 原子引用 原子数组 字段更新器 原子累加器 五、原子累加器 原子累加器与原子整数的性能比较 六、原子累加器LongAdder原理 LongAdder类有几个关键域 CAS锁 伪共享 LongAdder源码 七、Unsafe Unsafe的CAS操作实现 一、并发编...原创 2021-08-07 02:05:35 · 568 阅读 · 2 评论 -
并发编程:共享模型之内存
Java内存模 JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、 CPU指令优化等。 JMM体现在以下几个方面 原子性-保证指令不会受到线程上下文切换的影响 可见性-保证指令不会受cpu缓存的影响 有序性-保证指令不会受cpu指令并行优化的影响 ...原创 2021-08-06 00:08:41 · 282 阅读 · 4 评论