diff --git a/week_04/18/ArrayBlockingQueue.md b/week_04/18/ArrayBlockingQueue.md new file mode 100644 index 0000000000000000000000000000000000000000..38d6c00ba10c0bfd1ce23ef707acb2dd83cba424 --- /dev/null +++ b/week_04/18/ArrayBlockingQueue.md @@ -0,0 +1,51 @@ +# ArrayBlockingQueue +[ArrayBlockingQueue 详细源码解析 - 简书](https://www.jianshu.com/p/3fedd6e53cf9) +[死磕java concurrent包系列(四)基于AQS的条件队列彻底理解ArrayBlockingQueue - 简书](https://www.jianshu.com/p/3a77478658ec) +## Why use +1. 从线程安全,如何调度,是否有界,支持的操作等方面谈谈ArrayBlockingQueue的特点? +![](ArrayBlockingQueue/C26216E7-9E90-443F-8E80-BC17C60151FD.png) + +## 数据结构 +1. ArrayBlockingQueue的数据结构设计为什么需要维护两个指针takeIndex,putIndex?用来解决什么问题? + +![](ArrayBlockingQueue/F69855D7-1455-49B2-977A-1DEE07EF08D4.png) + +2. ArrayBlockingQueue的数据结构是怎样的? +![](ArrayBlockingQueue/72205113-EE4C-428E-90DA-2E16CEE02444.png) + +3. ArrayBlockingQueue的数据结构中Condition notEmpty;Condition notFull这两个属性的作用? +![](ArrayBlockingQueue/ABA927E1-1D53-4FD1-82DF-2B8B0D2015C4.png) + + + +## 入队操作 +1. ArrayBlockingQueue中的元素统一入队操作enqueue 的执行过程? + +![](ArrayBlockingQueue/5FB720BE-8FAF-4D2B-BA7D-46EB5902E936.png) + +2. ArrayBlockingQueue中的元素统一入队操作enqueue 的执行过程中putIndex 进行自增,当达到数组长度的时候,putIndex 重头再来,即设置为0,为什么? +![](ArrayBlockingQueue/5C4B5DCA-74B4-487A-A33F-809F38AAB65E.png) + + + + +3. ArrayBlockingQueue中入队操作 add 和 offer 方法的区别? +![](ArrayBlockingQueue/B4B3D5A8-4AC8-466A-AE37-7C62C187BCA0.png) + +4. ArrayBlockingQueue中入队操作方法 put 和add,offer方法 的区别?它的执行过程? +![](ArrayBlockingQueue/06CC7154-F4C4-48E3-913B-ABD3C9F8428C.png) + + +## 出队操作 +1. ArrayBlockingQueue中的元素统一入队操作dequeue 的执行过程? +![](ArrayBlockingQueue/868AF4E7-46E8-4367-AC55-D7216CB0F648.png) +2. ArrayBlockingQueue中出队的非阻塞提取方法 peek和 poll 的区别? +![](ArrayBlockingQueue/A114AB78-E806-4A60-9B6B-AC2F8A0114D6.png) +3. ArrayBlockingQueue中出队的阻塞提取方法take 的执行过程? + +![](ArrayBlockingQueue/9AEE3C00-C193-4492-8869-FC01E13BDDD2.png) + + + +4. ArrayBlockingQueue中通过 remove移除对应的元素过程?删除时会遇到哪两种情况?删除后为什么需要维护迭代器实例变量? +![](ArrayBlockingQueue/6A29537E-ED0A-44CC-BB48-D7F77A340056.png) \ No newline at end of file diff --git a/week_04/18/ArrayBlockingQueue/06CC7154-F4C4-48E3-913B-ABD3C9F8428C.png b/week_04/18/ArrayBlockingQueue/06CC7154-F4C4-48E3-913B-ABD3C9F8428C.png new file mode 100644 index 0000000000000000000000000000000000000000..15886f96fcab1cfc0c1c277711d3b9c34470c0a9 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/06CC7154-F4C4-48E3-913B-ABD3C9F8428C.png differ diff --git a/week_04/18/ArrayBlockingQueue/5C4B5DCA-74B4-487A-A33F-809F38AAB65E.png b/week_04/18/ArrayBlockingQueue/5C4B5DCA-74B4-487A-A33F-809F38AAB65E.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad5bd4487c95836d2f603689df0ea029c356c58 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/5C4B5DCA-74B4-487A-A33F-809F38AAB65E.png differ diff --git a/week_04/18/ArrayBlockingQueue/5FB720BE-8FAF-4D2B-BA7D-46EB5902E936.png b/week_04/18/ArrayBlockingQueue/5FB720BE-8FAF-4D2B-BA7D-46EB5902E936.png new file mode 100644 index 0000000000000000000000000000000000000000..d247ea6be61f1181358381c2888ae64d0134476c Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/5FB720BE-8FAF-4D2B-BA7D-46EB5902E936.png differ diff --git a/week_04/18/ArrayBlockingQueue/6A29537E-ED0A-44CC-BB48-D7F77A340056.png b/week_04/18/ArrayBlockingQueue/6A29537E-ED0A-44CC-BB48-D7F77A340056.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a2e214b0a7db2724cd3b9f68497f9f8dfa0b1 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/6A29537E-ED0A-44CC-BB48-D7F77A340056.png differ diff --git a/week_04/18/ArrayBlockingQueue/72205113-EE4C-428E-90DA-2E16CEE02444.png b/week_04/18/ArrayBlockingQueue/72205113-EE4C-428E-90DA-2E16CEE02444.png new file mode 100644 index 0000000000000000000000000000000000000000..a102de4b2593b3071f815b6b61de3b569cb5c856 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/72205113-EE4C-428E-90DA-2E16CEE02444.png differ diff --git a/week_04/18/ArrayBlockingQueue/868AF4E7-46E8-4367-AC55-D7216CB0F648.png b/week_04/18/ArrayBlockingQueue/868AF4E7-46E8-4367-AC55-D7216CB0F648.png new file mode 100644 index 0000000000000000000000000000000000000000..fd909a15cfde67f2c26446724e5df276ac9532c2 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/868AF4E7-46E8-4367-AC55-D7216CB0F648.png differ diff --git a/week_04/18/ArrayBlockingQueue/9AEE3C00-C193-4492-8869-FC01E13BDDD2.png b/week_04/18/ArrayBlockingQueue/9AEE3C00-C193-4492-8869-FC01E13BDDD2.png new file mode 100644 index 0000000000000000000000000000000000000000..91940717a66cfd4b6787dd8fb8e280dbf289b3b6 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/9AEE3C00-C193-4492-8869-FC01E13BDDD2.png differ diff --git a/week_04/18/ArrayBlockingQueue/A114AB78-E806-4A60-9B6B-AC2F8A0114D6.png b/week_04/18/ArrayBlockingQueue/A114AB78-E806-4A60-9B6B-AC2F8A0114D6.png new file mode 100644 index 0000000000000000000000000000000000000000..833621d2b89b0d82735e9e795bde7e26d82a50d0 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/A114AB78-E806-4A60-9B6B-AC2F8A0114D6.png differ diff --git a/week_04/18/ArrayBlockingQueue/ABA927E1-1D53-4FD1-82DF-2B8B0D2015C4.png b/week_04/18/ArrayBlockingQueue/ABA927E1-1D53-4FD1-82DF-2B8B0D2015C4.png new file mode 100644 index 0000000000000000000000000000000000000000..47ac4ebf9c256bb2a65daa7d002c97d0abbb8d1a Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/ABA927E1-1D53-4FD1-82DF-2B8B0D2015C4.png differ diff --git a/week_04/18/ArrayBlockingQueue/B4B3D5A8-4AC8-466A-AE37-7C62C187BCA0.png b/week_04/18/ArrayBlockingQueue/B4B3D5A8-4AC8-466A-AE37-7C62C187BCA0.png new file mode 100644 index 0000000000000000000000000000000000000000..6d813dc30923f446addda316867ebc22bc7b4b60 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/B4B3D5A8-4AC8-466A-AE37-7C62C187BCA0.png differ diff --git a/week_04/18/ArrayBlockingQueue/C26216E7-9E90-443F-8E80-BC17C60151FD.png b/week_04/18/ArrayBlockingQueue/C26216E7-9E90-443F-8E80-BC17C60151FD.png new file mode 100644 index 0000000000000000000000000000000000000000..1303b47c92ce507c782607cd00e6c93d0c9970b4 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/C26216E7-9E90-443F-8E80-BC17C60151FD.png differ diff --git a/week_04/18/ArrayBlockingQueue/F69855D7-1455-49B2-977A-1DEE07EF08D4.png b/week_04/18/ArrayBlockingQueue/F69855D7-1455-49B2-977A-1DEE07EF08D4.png new file mode 100644 index 0000000000000000000000000000000000000000..149a24a50f5fd29d7c361777ba8f9b86d7bf5879 Binary files /dev/null and b/week_04/18/ArrayBlockingQueue/F69855D7-1455-49B2-977A-1DEE07EF08D4.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8.md b/week_04/18/ConcurrentHashMap 1.8.md new file mode 100644 index 0000000000000000000000000000000000000000..dff819d8bb5cd348e9886e20212f9cd1d6d863d3 --- /dev/null +++ b/week_04/18/ConcurrentHashMap 1.8.md @@ -0,0 +1,47 @@ +# ConcurrentHashMap 1.8 +[ConcurrentHashMap源码解析(1)-社区博客-网易云](https://sq.163yun.com/blog/article/233752108046987264) +[Java 源码分析-ConcurrentHashMap(1.8) - 简书](https://www.jianshu.com/p/c7f85caa0b3f) +[基于 cas 机制的 concurrenthashmap 实现内幕 | 指 · 间](https://www.zhenchao.org/2019/01/31/java/cas-based-concurrent-hashmap/) +[J.U.C 并发集合(一):ConcurrentHashMap基础 | 陈树义](http://shuyi.me/2019/09/25/java_concurrent_collection/java_concurrent_collection_01_concurrent_hash_map_01/) +[并发容器之ConcurrentHashMap(JDK 1.8版本) - 简书](https://www.jianshu.com/p/e6ed5af68de2) +[面试必问之 ConcurrentHashMap 线程安全的具体实现方式 | Just Do Java](http://www.justdojava.com/2019/12/18/java-collection-15/) +[为并发而生的 ConcurrentHashMap(Java 8) - 云+社区 - 腾讯云](https://cloud.tencent.com/developer/article/1013643) +[J.U.C 并发集合(二):ConcurrentHashMap 扩容 | 陈树义](http://shuyi.me/2019/09/25/java_concurrent_collection/java_concurrent_collection_02_concurrent_hash_map_02/) +## Why use +## Segment + +## 重要数据结构 +1. ConcurrentHashMap中的内部静态类 Node 的作用?和 HashMap 中的有什么区别? + +![](ConcurrentHashMap%201.8/E8EF68C1-DB89-4F9D-BE87-B38A4E592232.png) + +2. ConcurrentHashMap中的静态内部类 TreeNode 的作用? + +![](ConcurrentHashMap%201.8/964C34C6-3328-4BDF-BA8E-2FA4287E7275.png) + + +3. ConcurrentHashMap中的静态内部类 ForwardingNode 的作用? +![](ConcurrentHashMap%201.8/E3FF7CC7-8210-4871-8769-6012FD104C93.png) + +4. ConcurrentHashMap中的静态内部类 ReservationNode 的作用? +![](ConcurrentHashMap%201.8/CDF80BCE-92E7-4EC0-8A77-4C32BACE6959.png) + +## 构造函数 + 1. ConcurrentHashMap中提供的构造函数的特点? +![](ConcurrentHashMap%201.8/A486FB92-EC45-493C-AB5A-E5BA60D788AE.png) + +## put 插入操作 +1. ConcurrentHashMap中通过initTable 初始化数组的过程?在该方法调用过程中可以看出实例变量**sizeCtl**的作用? + +![](ConcurrentHashMap%201.8/923EFA14-0EE3-45DA-A4E9-436B08FC79AB.png) +2. ConcurrentHashMap中帮助扩容的方法helpTransfer的触发条件?执行过程? +![](ConcurrentHashMap%201.8/007536A9-F050-46C3-A3B9-3FA1BDFC79D8.png) +3. ConcurrentHashMap中 put()插入操作的结尾处调用了addCount方法做了哪两件事?执行过程是怎样的? +![](ConcurrentHashMap%201.8/C2E1605A-70E2-43AA-8E4F-60576C5B5FF1.png) +4. ConcurrentHashMap中扩容逻辑的具体实现?(待补充) + 1. [为并发而生的 ConcurrentHashMap(Java 8) - 云+社区 - 腾讯云](https://cloud.tencent.com/developer/article/1013643) + 2. [多线程十二之ConcurrentHashMap1.8实现分析 – Python量化投资](https://www.lizenghai.com/archives/4639.html) + 3. [基于 cas 机制的 concurrenthashmap 实现内幕 | 指 · 间](https://www.zhenchao.org/2019/01/31/java/cas-based-concurrent-hashmap/) + 4. [J.U.C 并发集合(二):ConcurrentHashMap 扩容 | 陈树义](http://shuyi.me/2019/09/25/java_concurrent_collection/java_concurrent_collection_02_concurrent_hash_map_02/) +5. ConcurrentHashMap中 put()插入操作的总体流程? 注意过程中为什么 f.hash>0,代表的是链表的头结点? +![](ConcurrentHashMap%201.8/5A5E23E7-ECB9-4703-BA37-4D5F78B1ADE0.png) diff --git a/week_04/18/ConcurrentHashMap 1.8/007536A9-F050-46C3-A3B9-3FA1BDFC79D8.png b/week_04/18/ConcurrentHashMap 1.8/007536A9-F050-46C3-A3B9-3FA1BDFC79D8.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f7644732942b5985cae94a9838659a9f86daea Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/007536A9-F050-46C3-A3B9-3FA1BDFC79D8.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/5A5E23E7-ECB9-4703-BA37-4D5F78B1ADE0.png b/week_04/18/ConcurrentHashMap 1.8/5A5E23E7-ECB9-4703-BA37-4D5F78B1ADE0.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9f5251c72b754c316b4bc8b2db0807829551e0 Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/5A5E23E7-ECB9-4703-BA37-4D5F78B1ADE0.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/923EFA14-0EE3-45DA-A4E9-436B08FC79AB.png b/week_04/18/ConcurrentHashMap 1.8/923EFA14-0EE3-45DA-A4E9-436B08FC79AB.png new file mode 100644 index 0000000000000000000000000000000000000000..63d460ff4fe954f0a80561df3fcef371d0939302 Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/923EFA14-0EE3-45DA-A4E9-436B08FC79AB.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/964C34C6-3328-4BDF-BA8E-2FA4287E7275.png b/week_04/18/ConcurrentHashMap 1.8/964C34C6-3328-4BDF-BA8E-2FA4287E7275.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a9a21ade9b577013c6dbd5f08c0ecee68d6d9f Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/964C34C6-3328-4BDF-BA8E-2FA4287E7275.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/A486FB92-EC45-493C-AB5A-E5BA60D788AE.png b/week_04/18/ConcurrentHashMap 1.8/A486FB92-EC45-493C-AB5A-E5BA60D788AE.png new file mode 100644 index 0000000000000000000000000000000000000000..427e1ff97b3ef75967b631c8dc34c526bb35d04f Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/A486FB92-EC45-493C-AB5A-E5BA60D788AE.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/C2E1605A-70E2-43AA-8E4F-60576C5B5FF1.png b/week_04/18/ConcurrentHashMap 1.8/C2E1605A-70E2-43AA-8E4F-60576C5B5FF1.png new file mode 100644 index 0000000000000000000000000000000000000000..a161c62ddb2cb9ca0682cb90954305198e54286f Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/C2E1605A-70E2-43AA-8E4F-60576C5B5FF1.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/CDF80BCE-92E7-4EC0-8A77-4C32BACE6959.png b/week_04/18/ConcurrentHashMap 1.8/CDF80BCE-92E7-4EC0-8A77-4C32BACE6959.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa018c5af216bd6e7e58e7d996480bd4362bb34 Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/CDF80BCE-92E7-4EC0-8A77-4C32BACE6959.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/E3FF7CC7-8210-4871-8769-6012FD104C93.png b/week_04/18/ConcurrentHashMap 1.8/E3FF7CC7-8210-4871-8769-6012FD104C93.png new file mode 100644 index 0000000000000000000000000000000000000000..4580c9a0ca3989cf6e7bd0f3bfaeb950c84b3aed Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/E3FF7CC7-8210-4871-8769-6012FD104C93.png differ diff --git a/week_04/18/ConcurrentHashMap 1.8/E8EF68C1-DB89-4F9D-BE87-B38A4E592232.png b/week_04/18/ConcurrentHashMap 1.8/E8EF68C1-DB89-4F9D-BE87-B38A4E592232.png new file mode 100644 index 0000000000000000000000000000000000000000..cb65a343d99c7bd35c12fa3ea50f1a1dd3fca948 Binary files /dev/null and b/week_04/18/ConcurrentHashMap 1.8/E8EF68C1-DB89-4F9D-BE87-B38A4E592232.png differ diff --git a/week_04/18/ConcurrentLinkedQueue.md b/week_04/18/ConcurrentLinkedQueue.md new file mode 100644 index 0000000000000000000000000000000000000000..b9c3a67cd2dbfbe75bbae516e2f58a1894ed8fb8 --- /dev/null +++ b/week_04/18/ConcurrentLinkedQueue.md @@ -0,0 +1,61 @@ +# ConcurrentLinkedQueue +## 参考 +[【Java并发编程】—–“J.U.C”:ConcurrentLinkedQueue - 简书](https://www.jianshu.com/p/32d6526494fd) +[ConcurrentLinkedQueue原理解析 - 简书](https://www.jianshu.com/p/b9fa382926e0) +[并发容器-ConcurrentLinkedQueue详解 - 简书](https://www.jianshu.com/p/231caf90f30b) +## Why use +1. 为什么要引入ConcurrentLinkedQueue? + +![](ConcurrentLinkedQueue/FE61C37A-2361-4CD3-B14D-7BF4A126617D.png) +2. ConcurrentLinkedQueue具有哪些特点? +![](ConcurrentLinkedQueue/34698E77-E06C-454B-88B4-636601A79B97.png) + +## 数据结构 +1. ConcurrentLinkedQueue的类结构是怎样的? + +![](ConcurrentLinkedQueue/F3DA5DAD-F922-45F3-BD11-2616363FC424.png) + +2. ConcurrentLinkedQueue的静态内部类 Node 的类结构是怎样的?有什么作用? +![](ConcurrentLinkedQueue/E7061624-37BB-4ED7-9EB8-F07FA6918C1B.png) + +3. ConcurrentLinkedQueue中包含哪几种类型的节点? + +![](ConcurrentLinkedQueue/8D54E941-4B4F-4C3D-8BCE-04DC4EF27C35.png) + +4. ConcurrentLinkedQueue的源代码分析中,我们将会看到队列有时会处于不一致状态。为此,ConcurrentLinkedQueue 使用三个不变式 ( **基本不变式,head 的不变式和 tail 的不变式** ),来约束队列中方法的执行。通过这三个不变式来维护非阻塞算法的正确性,这三个不变式是怎样的(不变式,即不变性约束)? + +![](ConcurrentLinkedQueue/D63E6E8A-9F25-48F1-BB76-6213BD03CF04.png) + +5. ConcurrentLinkedQueue中 head 节点的不变性和可变性约束? + +![](ConcurrentLinkedQueue/6476B071-05F6-42EC-B641-2A1EBF2AFBC0.png) + +6. ConcurrentLinkedQueue中 tail 节点的不变性和可变性约束? + +![](ConcurrentLinkedQueue/D1AB030A-86C2-4F66-BFE1-3429DF035E1C.png) + +## 入队 +1. ConcurrentLinkedQueue入队过程中队列添加第一个节点后的情况?tail 节点的指向?这种情况对应代码的执行过程? +![](ConcurrentLinkedQueue/8FD5BD88-6620-4CAD-879B-EBBA37F201AB.png) + + +2. ConcurrentLinkedQueue入队过程中队列添加第二个节点后的情况?此时tail 节点的指向?这种情况对应代码的执行过程? +![](ConcurrentLinkedQueue/854071A2-EAB7-4182-B43A-923B6898D792.png) + + +3. ConcurrentLinkedQueue入队过程中的`t != (t = tail)` 这个判断的代码,如何理解,什么时候结果会是 false? +![](ConcurrentLinkedQueue/806693FC-DF81-4820-B285-9A79DB56BDEE.png) + +4. 在并发环境,ConcurrentLinkedQueue入列线程安全考虑具体可分哪2类? +![](ConcurrentLinkedQueue/EA28788D-1E59-4212-9E94-ABA681949597.png) +5. ConcurrentLinkedQueue入队过程中,执行到 p==q 的场景(即 tail 节点滞后的情况,此时 tail 节点已脱落,成为了哨兵节点)? +![](ConcurrentLinkedQueue/0056E67E-28C1-46E0-8DB4-ED1ED96FDBCE.png) + +## 出队 +1. ConcurrentLinkedQueue出队过程中删除第一个节点的情况?删除第一个节点过程中head的指向是如何变换的? + +![](ConcurrentLinkedQueue/DE5E88BC-9A3A-46AF-9555-EB009971D72A.png) + + +2. ConcurrentLinkedQueue出队过程中删除第二个节点,第三个节点时的情况?过程中head的指向是如何变换的? +![](ConcurrentLinkedQueue/61A22E30-423A-4AF6-AFFB-9ECB153EAA95.png) \ No newline at end of file diff --git a/week_04/18/ConcurrentLinkedQueue/0056E67E-28C1-46E0-8DB4-ED1ED96FDBCE.png b/week_04/18/ConcurrentLinkedQueue/0056E67E-28C1-46E0-8DB4-ED1ED96FDBCE.png new file mode 100644 index 0000000000000000000000000000000000000000..459b3b4c4b63394c97524c362b62fe2e9e946f42 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/0056E67E-28C1-46E0-8DB4-ED1ED96FDBCE.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/34698E77-E06C-454B-88B4-636601A79B97.png b/week_04/18/ConcurrentLinkedQueue/34698E77-E06C-454B-88B4-636601A79B97.png new file mode 100644 index 0000000000000000000000000000000000000000..b02c74f6f511f341bd5e67d48763156fbe1c96fb Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/34698E77-E06C-454B-88B4-636601A79B97.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/61A22E30-423A-4AF6-AFFB-9ECB153EAA95.png b/week_04/18/ConcurrentLinkedQueue/61A22E30-423A-4AF6-AFFB-9ECB153EAA95.png new file mode 100644 index 0000000000000000000000000000000000000000..19406d7f5d27a2d7b02cdd07a5603138a1de62be Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/61A22E30-423A-4AF6-AFFB-9ECB153EAA95.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/6476B071-05F6-42EC-B641-2A1EBF2AFBC0.png b/week_04/18/ConcurrentLinkedQueue/6476B071-05F6-42EC-B641-2A1EBF2AFBC0.png new file mode 100644 index 0000000000000000000000000000000000000000..50c396fbc20ffab77544a6eac7d6c93f431245c7 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/6476B071-05F6-42EC-B641-2A1EBF2AFBC0.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/806693FC-DF81-4820-B285-9A79DB56BDEE.png b/week_04/18/ConcurrentLinkedQueue/806693FC-DF81-4820-B285-9A79DB56BDEE.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0aa2c05f592a28cda2fecb3f03a2fabf7170af Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/806693FC-DF81-4820-B285-9A79DB56BDEE.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/854071A2-EAB7-4182-B43A-923B6898D792.png b/week_04/18/ConcurrentLinkedQueue/854071A2-EAB7-4182-B43A-923B6898D792.png new file mode 100644 index 0000000000000000000000000000000000000000..22990a6cfd0e94eda5c6a973f90e86ba9b8171c8 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/854071A2-EAB7-4182-B43A-923B6898D792.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/8D54E941-4B4F-4C3D-8BCE-04DC4EF27C35.png b/week_04/18/ConcurrentLinkedQueue/8D54E941-4B4F-4C3D-8BCE-04DC4EF27C35.png new file mode 100644 index 0000000000000000000000000000000000000000..333249815ff93962fcd8b973395e2520c0df21c3 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/8D54E941-4B4F-4C3D-8BCE-04DC4EF27C35.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/8FD5BD88-6620-4CAD-879B-EBBA37F201AB.png b/week_04/18/ConcurrentLinkedQueue/8FD5BD88-6620-4CAD-879B-EBBA37F201AB.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7a406b69bf8431edafcfd6c8b7fbd9d816f1c9 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/8FD5BD88-6620-4CAD-879B-EBBA37F201AB.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/D1AB030A-86C2-4F66-BFE1-3429DF035E1C.png b/week_04/18/ConcurrentLinkedQueue/D1AB030A-86C2-4F66-BFE1-3429DF035E1C.png new file mode 100644 index 0000000000000000000000000000000000000000..e2dc59882909b2cc8a7399ba49917d9608a6fee3 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/D1AB030A-86C2-4F66-BFE1-3429DF035E1C.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/D63E6E8A-9F25-48F1-BB76-6213BD03CF04.png b/week_04/18/ConcurrentLinkedQueue/D63E6E8A-9F25-48F1-BB76-6213BD03CF04.png new file mode 100644 index 0000000000000000000000000000000000000000..25995ecded09869fede826fe6abcb173e73a7043 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/D63E6E8A-9F25-48F1-BB76-6213BD03CF04.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/DE5E88BC-9A3A-46AF-9555-EB009971D72A.png b/week_04/18/ConcurrentLinkedQueue/DE5E88BC-9A3A-46AF-9555-EB009971D72A.png new file mode 100644 index 0000000000000000000000000000000000000000..bf60ce974507fd8efe302f67404c3746d665bcbf Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/DE5E88BC-9A3A-46AF-9555-EB009971D72A.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/E7061624-37BB-4ED7-9EB8-F07FA6918C1B.png b/week_04/18/ConcurrentLinkedQueue/E7061624-37BB-4ED7-9EB8-F07FA6918C1B.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc430fdd9b5e988ade7c5afba2f1c92844bf452 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/E7061624-37BB-4ED7-9EB8-F07FA6918C1B.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/EA28788D-1E59-4212-9E94-ABA681949597.png b/week_04/18/ConcurrentLinkedQueue/EA28788D-1E59-4212-9E94-ABA681949597.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa16434067c4ab91bbfb7780c9b238f20982d9b Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/EA28788D-1E59-4212-9E94-ABA681949597.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/F3DA5DAD-F922-45F3-BD11-2616363FC424.png b/week_04/18/ConcurrentLinkedQueue/F3DA5DAD-F922-45F3-BD11-2616363FC424.png new file mode 100644 index 0000000000000000000000000000000000000000..613f1ebb419d43a86f19276ea6c4cc0c6d18a96c Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/F3DA5DAD-F922-45F3-BD11-2616363FC424.png differ diff --git a/week_04/18/ConcurrentLinkedQueue/FE61C37A-2361-4CD3-B14D-7BF4A126617D.png b/week_04/18/ConcurrentLinkedQueue/FE61C37A-2361-4CD3-B14D-7BF4A126617D.png new file mode 100644 index 0000000000000000000000000000000000000000..d657c95e75d676a796fea7ea2d1d7a9c5c9d4aa4 Binary files /dev/null and b/week_04/18/ConcurrentLinkedQueue/FE61C37A-2361-4CD3-B14D-7BF4A126617D.png differ diff --git a/week_04/18/CopyOnWriteArrayList.md b/week_04/18/CopyOnWriteArrayList.md new file mode 100644 index 0000000000000000000000000000000000000000..76b6f58ba04a36b255ba3bb9262f784d62894dce --- /dev/null +++ b/week_04/18/CopyOnWriteArrayList.md @@ -0,0 +1,40 @@ +# CopyOnWriteArrayList +[CopyOnWriteArrayList你都不知道,怎么拿offer? - 掘金](https://juejin.im/post/5be23e6ef265da6135720d61) +## Why use +1. 为什么引入CopyOnWriteArrayList,它解决了什么问题? +![](CopyOnWriteArrayList/C03EB474-D22A-4069-9D5B-6F65C158A139.png) + +2. 什么场景下使用CopyOnWriteArrayList?它的特点和实现原理? + +![](CopyOnWriteArrayList/09B01D7F-3469-42F2-A4A5-74D3EAFEF3B4.png) + +## 数据结构 + 1. **CopyOnWriteArrayList**类关系是怎样的? + + +## 方法 +1. CopyOnWriteArrayList中 add 方法的实现? +![](CopyOnWriteArrayList/6AC2754D-AF3E-4EE0-84F7-CD4155E77FF6.png) + +2. CopyOnWriteArrayList中 remove 方法的实现? +![](CopyOnWriteArrayList/35698580-FDA6-4F12-A10A-9FB1B8FF22B7.png) + +## COWIterator + + 1. CopyOnWriteArrayList中**为什么遍历时不用调用者显式加锁**? +![](CopyOnWriteArrayList/FB943C0F-34AE-4BC8-9928-792499D85E5C.png) + + + + + + +## 设计 +1. question +![](CopyOnWriteArrayList/1F8EFC7E-779E-4364-86C4-6273DA798830.png) + - answer +![](CopyOnWriteArrayList/3EBD03D2-A1C0-40B9-8229-36B9993CF07A.png) + +2. **CopyOnWriteArrayList缺点**? + +![](CopyOnWriteArrayList/7507814A-C082-4E81-8F17-15D66C7511F8.png) \ No newline at end of file diff --git a/week_04/18/CopyOnWriteArrayList/09B01D7F-3469-42F2-A4A5-74D3EAFEF3B4.png b/week_04/18/CopyOnWriteArrayList/09B01D7F-3469-42F2-A4A5-74D3EAFEF3B4.png new file mode 100644 index 0000000000000000000000000000000000000000..c44d7708ef983cc98a86983c0f46fd422b95da93 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/09B01D7F-3469-42F2-A4A5-74D3EAFEF3B4.png differ diff --git a/week_04/18/CopyOnWriteArrayList/1F8EFC7E-779E-4364-86C4-6273DA798830.png b/week_04/18/CopyOnWriteArrayList/1F8EFC7E-779E-4364-86C4-6273DA798830.png new file mode 100644 index 0000000000000000000000000000000000000000..3a641529e1da18272cda897458f3da02a5898420 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/1F8EFC7E-779E-4364-86C4-6273DA798830.png differ diff --git a/week_04/18/CopyOnWriteArrayList/35698580-FDA6-4F12-A10A-9FB1B8FF22B7.png b/week_04/18/CopyOnWriteArrayList/35698580-FDA6-4F12-A10A-9FB1B8FF22B7.png new file mode 100644 index 0000000000000000000000000000000000000000..d357732671f8c8ab3191b86f874b07a845fc77be Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/35698580-FDA6-4F12-A10A-9FB1B8FF22B7.png differ diff --git a/week_04/18/CopyOnWriteArrayList/3EBD03D2-A1C0-40B9-8229-36B9993CF07A.png b/week_04/18/CopyOnWriteArrayList/3EBD03D2-A1C0-40B9-8229-36B9993CF07A.png new file mode 100644 index 0000000000000000000000000000000000000000..a6610d5cdeaf7a1ccfbc14bc6f6d2a2007c99312 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/3EBD03D2-A1C0-40B9-8229-36B9993CF07A.png differ diff --git a/week_04/18/CopyOnWriteArrayList/6AC2754D-AF3E-4EE0-84F7-CD4155E77FF6.png b/week_04/18/CopyOnWriteArrayList/6AC2754D-AF3E-4EE0-84F7-CD4155E77FF6.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b32a38043b71826d48d3eafd16ccafcde69602 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/6AC2754D-AF3E-4EE0-84F7-CD4155E77FF6.png differ diff --git a/week_04/18/CopyOnWriteArrayList/7507814A-C082-4E81-8F17-15D66C7511F8.png b/week_04/18/CopyOnWriteArrayList/7507814A-C082-4E81-8F17-15D66C7511F8.png new file mode 100644 index 0000000000000000000000000000000000000000..e1edfed9a2140ff699827bbf8aafc407ac6c70b1 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/7507814A-C082-4E81-8F17-15D66C7511F8.png differ diff --git a/week_04/18/CopyOnWriteArrayList/C03EB474-D22A-4069-9D5B-6F65C158A139.png b/week_04/18/CopyOnWriteArrayList/C03EB474-D22A-4069-9D5B-6F65C158A139.png new file mode 100644 index 0000000000000000000000000000000000000000..d9952c7899f9a44680a0ec949907e79fe9f77f26 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/C03EB474-D22A-4069-9D5B-6F65C158A139.png differ diff --git a/week_04/18/CopyOnWriteArrayList/FB943C0F-34AE-4BC8-9928-792499D85E5C.png b/week_04/18/CopyOnWriteArrayList/FB943C0F-34AE-4BC8-9928-792499D85E5C.png new file mode 100644 index 0000000000000000000000000000000000000000..a016632e6a98870ce95f0bdb8e796d31e6b2bdf9 Binary files /dev/null and b/week_04/18/CopyOnWriteArrayList/FB943C0F-34AE-4BC8-9928-792499D85E5C.png differ