摘要: 并发编程从零开始(八)-ConcurrentHashMap 5.5 ConcurrentHashMap HashMap通常的实现方式是“数组+链表”,这种方式被称为“拉链法”。ConcurrentHashMap在这个基本原理之上进行了各种优化。 首先是所有数据都放在一个大的HashMap中;其次是引 阅读全文
posted @ 2021-10-27 18:26 会编程的老六 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(七)-ConcurrentLinkedQueue ####5.4 ConcurrentLinkedQueue/Deque AQS内部的阻塞队列实现原理:基于双向链表,通过对head/tail进行CAS操作,实现入队和出队。(队列中存放的是线程) ConcurrentLinkedQu 阅读全文
posted @ 2021-10-27 16:50 会编程的老六 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(六)-BlockingDeque+CopyOnWrite 5.2 BlockingDeque BlockingDeque定义了一个阻塞的双端队列接口: 该接口继承了BlockingQueue接口,同时增加了对应的双端队列操作接口。该接口只有一个实现,就是LinkedBlocking 阅读全文
posted @ 2021-10-27 15:23 会编程的老六 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(五)-BlockingQueue 第二部分:JUC 5 并发容器 5.1 BlockingQueue 在所有的并发容器中,BlockingQueue是最常见的一种。BlockingQueue是一个带阻塞功能的队列,当入队列时,若队列已满,则阻塞调用者;当出队列时,若队列为空,则阻塞 阅读全文
posted @ 2021-10-27 14:23 会编程的老六 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(四) 4 JMM内存模型 4.1 JMM与happen-before 4.1.1 为什么会存在内存可见性问题 下图为x86架构下CPU缓存的布局,即在一个CPU 4核下,L1、L2、L3三级缓存与主内存的布局。每个核上面有L1、L2缓存,L3缓存为所有核共用。 因为存在CPU缓存一 阅读全文
posted @ 2021-10-27 09:39 会编程的老六 阅读(255) 评论(0) 推荐(0) 编辑