Skip to content

Commit cdee444

Browse files
committed
📝 Writing docs.
1 parent 2ebb2ff commit cdee444

1 file changed

Lines changed: 20 additions & 8 deletions

File tree

docs/concurrent/Java并发编程实战笔记.md

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
- [第 5 章 基础构建模块](#第-5-章-基础构建模块)
2929
- [5.1 同步容器类](#51-同步容器类)
3030
- [5.2 并发容器](#52-并发容器)
31-
- [5.3 阻塞队列和生产者-消费者模式](#53-阻塞队列和生产者-消费者模式)
31+
- [5.3 BlockingQueue](#53-blockingqueue)
3232
- [5.4 阻塞方法与中断方法](#54-阻塞方法与中断方法)
3333
- [5.5 同步工具类](#55-同步工具类)
3434
- [5.6 构建高效且可伸缩的结果缓存](#56-构建高效且可伸缩的结果缓存)
@@ -223,17 +223,29 @@ Java 提供了一种内置的锁机制来支持原子性:synchronized。
223223

224224
### 5.1 同步容器类
225225

226-
* 5.1.1 同步容器类的问题
227-
* 5.1.2 迭代器与 Concurrent-ModificationException
228-
* 5.1.3 隐藏迭代器
226+
* 包括 Vector 和 Hashtable。
227+
* 实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。
228+
* 同步容器类的问题
229+
* 迭代,如果有其他线程并发修改容器,会抛出 ConcurrentModificationException
230+
* 跳转
231+
* 条件运算
232+
* 解决方法
233+
* 在客户端额外加锁来保护复合操作。
229234

230235
### 5.2 并发容器
231236

232-
* 5.2.1 ConcurrentHashMap
233-
* 5.2.2 额外的原子 Map 操作
234-
* 5.2.3 CopyOnWriteArrayList
237+
* 包括 ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet。
238+
* ConcurrentHashMap 用于替代同步 HashMap。
239+
* ConcurrentHashMap 的实现机制是分段锁。在这种机制中,任意数量的读线程可以并发访问 Map,一定数量的写线程可以并发修改 Map。
240+
* ConcurrentHashMap 在并发访问环境下实现了更高的吞吐量,而在单线程环境中只损失非常小的性能。
241+
* ConcurrentHashMap 不同于同步容器,不需要再迭代过程中对容器加锁。
242+
* CopyOnWriteArrayList 用于替代同步 List。CopyOnWrite 意味着写入时复制,即在每次修改时,都会创建并重新发布一个新的容器副本,从而实现可变性。写入时复制容器的迭代器保留一个指向底层基础数组的引用,这个数组当前位于迭代器的起始位置,由于它不会被修改,因此在对齐进行同步时只需确保数组内容的可见性。
235243

236-
### 5.3 阻塞队列和生产者-消费者模式
244+
### 5.3 BlockingQueue
245+
246+
* BlockingQueue 提供了可阻塞的 put 和 take 方法,以及支持定时的 offer 和 poll 方法。如果队列满了,那么 put 方法将阻塞直到有空间可用;如果列队为空,那么 take 方法将阻塞到有元素可用。队列可以是有界的或无界的,无界队列永远不会填满,所以无界队列的 put 方法永远不会阻塞。
247+
* BlockingQueue 支持生产者-消费者模式。
248+
* BlockingQueue 的实现:LinkedBlockingQueue 和 ArrayBlockingQueue 是 FIFO 队列。PriorityBlockingQueue 是一个按优先级排序的队列。
237249

238250
* 5.3.1 示例:桌面搜索
239251
* 5.3.2 串行线程封闭

0 commit comments

Comments
 (0)