摘要: 1、 并发编程三要素-原子性、可见性、有序性 在讨论CAS前,我想先讨论一下并发编程的三要素,这个应该可以帮助理解CAS的作用等。其实上一篇提到的Java内存模型就是围绕着在并发过程中如何处理原子性、可见性和有序性这3个特征来建立的,所以我理解Java编程实现如果满足了这3个特性,就是线程安全的,可 阅读全文
posted @ 2019-07-30 13:55 smile_lg 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 一直以为多线程环境的同步只能通过这个来实现的,事实上Java还提供了另外一个更加轻量级的实现-volatile,如果说synchronized实现了数据在同一时刻只能有一个线程对数据访问的话,那么volatile实现的就是同时可以多个线程在访问数据,但是只要数据发生了变化,便确保其他线程及时“感知” 阅读全文
posted @ 2019-07-30 13:54 smile_lg 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 1、为什么会用到synchronized Java语言的一个高级特性就是支持多线程,线程在操作系统的实现上,可以看成是轻量级的进程,同一进程中的线程都将共享进程的内存空间,所以Java的多线程在共享JVM的内存空间。JVM的内存空间主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区和运行时常量池 阅读全文
posted @ 2019-07-30 13:49 smile_lg 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 在具备了volatile、CAS和模板方法设计模式的知识之后,我们可以来深入学习下AbstractQueuedSynchronizer(AQS),本文主要想从AQS的产生背景、设计和结构、源代码实现及AQS应用这4个方面来学习下AQS,文章耗时一个月,所以篇幅有点长,需要一点耐心。 1、AQS产生背 阅读全文
posted @ 2019-07-30 10:55 smile_lg 阅读(268) 评论(0) 推荐(1) 编辑
摘要: 上文已经总结了AQS的前世今生,有了这个基础我们就可以来进一步学习并发工具类。首先我们要学习的就是ReentrantLock,本文将从ReentrantLock的产生背景、源码原理解析和应用来学习ReentrantLock这个并发工具类。 1、 产生背景 前面我们已经学习过了synchronized 阅读全文
posted @ 2019-07-30 10:37 smile_lg 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 基于AQS的前世今生,来学习并发工具类ReentrantReadWriteLock。本文将从ReentrantReadWriteLock的产生背景、源码原理解析和应用来学习这个并发工具类。 1、 产生背景 前面我们学习的重入锁ReentrantLock本质上还是互斥锁,每次最多只能有一个线程持有Re 阅读全文
posted @ 2019-07-30 10:33 smile_lg 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 基于AQS的前世今生,来学习并发工具类CountDownLatch。本文将从CountDownLatch的应用场景、源码原理解析来学习这个并发工具类。 1、 应用场景 CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类。现以工作中的一个场景来描述下Coun 阅读全文
posted @ 2019-07-30 10:29 smile_lg 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 基于AQS的前世今生,来学习并发工具类Semaphore。本文将从Semaphore的应用场景、源码原理解析来学习这个并发工具类。 1、 应用场景 Semaphore用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。还可以用来实现某种资源池限制,或者对容器施加边界。 1.1 当 阅读全文
posted @ 2019-07-30 10:10 smile_lg 阅读(277) 评论(0) 推荐(0) 编辑