
java并发编程
短腿小柯基v
这个作者很懒,什么都没留下…
展开
-
java并发编程5-AQS底层原理你还不知道吗
1.前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AQS实现的。AQS 全称是 AbstractQueuedSynchronizer,顾名思义,是一个用来构建锁和同步器的框架,它底层用了 CAS 技术来保证操作的原子性,同时运用了 CLH 同步队列作同步器,这也是 ReentrantLock、CountDownLatch 等同步工具实现同步的底...原创 2020-04-05 13:14:11 · 362 阅读 · 0 评论 -
java并发编程4-java之你所不知道的synchronized
1. 锁的基础知识:1.1 锁的种类:乐观锁 乐观锁是对于数据冲突保持一种乐观态度,操作数据时不会对数据锁定(这使得多个任务可以并行的对数据进行操作),只有到数据提交的时候才通过一种机制来验证数据是否存在冲突(一般是通过加版本号然后进行比对的方式实现);特点:乐观锁是一种并发类型的锁,本身不对数据进行加锁通过业务实现锁的功能,不对数据进行加锁就意味着允许多个请求同时访问数据,这种...原创 2020-04-03 22:44:21 · 154 阅读 · 0 评论 -
java并发编程3-互斥锁:原子性问题
在 可见性、原子性、有序性的追根溯源 的课后问答中,我们提到了long类型在32位和64位所引发的并发问题,它就是一个典型的原子性问题。那原子性问题的原因是什么?怎么解决原子性问题呢? 其实原子性问题的源头就是线程切换时间片所导致的,在早期单核时代,我们知道操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。em…好吧,我错过了这个好时代。那么在多核时代...原创 2020-04-03 22:28:00 · 185 阅读 · 0 评论 -
java并发编程1-可见性、原子性、有序性的追根溯源
1.课前知识:CPU、内存、I/O 设备速度的差异:CPU 和内存的速度差异可以形象地描述为:CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间)。内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。解决方法:为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系机构、操作系统、编译程序都...原创 2020-04-02 19:44:30 · 214 阅读 · 0 评论 -
java并发编程2-一起看Happens-Before 规则的前因后果
上一章 可见性、原子性、有序性的追根溯源 我们了解到了java并发编程常见的3个问题,那么有问题肯定需要解决呀!这章我们聊聊如何解决可见性和有序性是怎么解决的——java内存模型。什么是java内存模型? 我们已经知道导致可见性的原因是缓存,导致有序性的原因是编译优化,有人说最直接的办法不就是直接禁用缓存和编译优化嘛!这样当然是不行滴!这样太影响性能了!合理的解决方案就是按需禁用缓存和编...原创 2020-04-03 12:08:36 · 197 阅读 · 0 评论