摘要: 问题 : rwl 的底层实现是什么,应用场景是什么 读写锁 ReentrantReadWriteLock 首先我们来了解一下 ReentrantReadWriteLock 的作用是什么?和 ReentranLock 有什么区别?Reentrancy 英文的意思是可重入性。ReentrantReadWriteLock下文简称(rrwl) 下面总结来自 ... 阅读全文
posted @ 2018-12-22 16:56 float123 阅读(230) 评论(0) 推荐(0)
摘要: 文章代码分析和部分图片来自参考文章 问题 : CountDownLatch 和 CyclicBarrier 的区别 认识 CountDownLatch 分析这个类,首先了解一下它所可以实现的效果,然后再顺着这个源码的思路思考是不是和它实现的效果一样。下面的代码和图片可以说明 CountDownLatch (下文简称CDL)的工作过程。 ... 阅读全文
posted @ 2018-12-22 16:55 float123 阅读(178) 评论(0) 推荐(0)
摘要: 文章部分代码和照片来自参考资料 问题 : ConditionObject 的 await 和 signal 方法是如何实现的 ConditonObject ConditionObject 继承 Condition 这个接口, 看一下这个接口的注解说明 : Condition factors out the Object monitor ... 阅读全文
posted @ 2018-12-22 16:54 float123 阅读(201) 评论(0) 推荐(0)
摘要: Hashmap 和 Concurrenthashmap Hashmap 不适合并发,应该使用ConcurrentHashMap . 这是很多人都知道的,但是为什么呢? 可以先看一下这两篇文章. JDK7与JDK8中HashMap的实现 和 谈谈HashMap线程不安全的体现. 由这两篇文章我们可以知道 : Hashmap 不适合并发的原因是当Hashmap扩... 阅读全文
posted @ 2018-12-11 11:32 float123 阅读(293) 评论(0) 推荐(0)
摘要: 文章部分图片和代码来自参考文章。 LockSupport 和 CLH 和 ConditionObject 阅读源码首先看一下注解 ,知道了大概的意思后,再进行分析。注释一开始就进行了概括。AQS的实现是基于FIFO等待队列的。 Provides a framework for implementing blocking locks and related s... 阅读全文
posted @ 2018-12-11 11:31 float123 阅读(275) 评论(0) 推荐(0)
摘要: Thread 的状态 线程共有五种状态.分别是: (1)新建 (2)就绪 (3)运行 (4)阻塞 (5)死亡 ,下面列列举的状态需要结合状态示意图更好理解. 新建状态(New): 新创建了一个线程对象。 就绪状态(Runnable): 线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态... 阅读全文
posted @ 2018-12-02 15:20 float123 阅读(295) 评论(0) 推荐(0)
摘要: 分页存储管理的基本概念 图一 图二 在开始学习的时候一直困惑在虚拟存储器到底作用是什么,为什么要这样子设计,后来看到了后面的工作流程才明白了为什么需要这样子设计. 可以这样子理解虚拟存储器作用,就以电脑启动为例,我的win7 安装在C盘,准确点时位于硬盘,当我开机的时候,CPU 肯定是调用我硬盘里的 阅读全文
posted @ 2018-12-01 11:24 float123 阅读(481) 评论(0) 推荐(0)
摘要: DRAM 和 SRAM 随机访问器存储器(Random-Access Memory ,RAM) 分为两类 : 静态和动态. 这两个的区别可以见下面这样图: 持续 指的是动态DRAM的数据需要硬件是不是充电刷新,即需要充电刷新才能维持0或1的状态,而静态RAM只要有供电就会保持状态. 敏感 指的是SRAM一般不容易收到外界影响,一直会保持状态0或者1.而DR... 阅读全文
posted @ 2018-11-29 22:10 float123 阅读(878) 评论(0) 推荐(0)
摘要: 存储器层次结构 图五 如何从内存中拿地址时先去判断缓冲是否存在 我们首先要了解一下cache的操作流程,见下图. 假如在主存中拿数据的时候有个映射就可以判断是否存在缓冲,这个映射有三种方式 直接 全相联 组相联 图一 图二 这三种方式如何理解呢?如下图,假如我们知道一个主存地址,一部分可以映射到Cache ,一部分是主... 阅读全文
posted @ 2018-11-29 22:05 float123 阅读(739) 评论(0) 推荐(0)
摘要: CAS 原理 先来看看下面的代码是否可以输出预期的值.开启了两个线程,是否会输出200 呢 结果由于并发的原因,结果会小于或等于200 , 原因出现在 count++; 由于这一行代码存在三个操作: 取值,+1,赋值. 但是由于这三个操作不是原子性的,有可能执行的时候其他线程读取到了,于是就产生了错误的值. 那么我们在只要在这一行代码加上锁就可以... 阅读全文
posted @ 2018-11-20 22:21 float123 阅读(268) 评论(1) 推荐(0)