Java并发
阿云_
这个作者很懒,什么都没留下…
展开
-
ReentrantLock源码解析
ReentrantLock lock = new ReentrantLock(false);lock.lock();System.out.println("do something");lock.unlock();首先来介绍 AbstractQueuedSynchronizer,它是一个双向链表的结构,有头节点和尾结点。来看看它的一些属性// 在ReentrantLock语境下代表重入次数(0代表没有被持有)private volatile int state;// 独占锁模式下持有锁的线程原创 2020-08-31 19:40:47 · 280 阅读 · 0 评论 -
Java并发学习(一)并发程序的原子性、有序性和可见性问题
前言编写正确的并发程序是一件极困难的事情,并发程序的 Bug 很难重现,也很难追踪,很多时候都让人很抓狂。并发编程是怎么出问题的?这些年,我们的 CPU、内存、I/O 设备都在不断更新迭代,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异:CPU的速度远远高于内存,内存的速度又远远高于I/O。程序里大部分语句都要访问内存,有些还要访问 I/O,即使CPU速度再快,I/O跟...原创 2019-12-12 22:54:38 · 202 阅读 · 0 评论 -
内存屏障与volatile内存语义的实现
内存屏障为了保证内存可见性,java 编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型的处理器重排序。JMM 把内存屏障指令分为下列四类: 屏障类型 指令示例 说明 LoadLoad Barriers Load1; LoadLoad; Load2 ...原创 2019-09-26 23:51:45 · 849 阅读 · 0 评论