@@ -33,7 +33,7 @@ implements List<E>, RandomAccess, Cloneable, Serializable
3333
3434在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此对于每次读取都进行加锁其实是一种资源浪费。我们应该允许多个线程同时访问 `List ` 的内部数据,毕竟读取操作是安全的。
3535
36- 这和我们之前在多线程章节讲过 `ReentrantReadWriteLock ` 读写锁的思想非常类似,也就是读读共享、写写互斥、读写互斥、写读互斥。JDK 中提供了 `CopyOnWriteArrayList ` 类比相比于在读写锁的思想又更进一步。为了将读取的性能发挥到极致,`CopyOnWriteArrayList ` 读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取操作。只有写入和写入之间需要进行同步等待。这样一来,读操作的性能就会大幅度提升。**那它是怎么做的呢?**
36+ 这和我们之前提到过的 `ReentrantReadWriteLock ` 读写锁的思想非常类似,也就是读读共享、写写互斥、读写互斥、写读互斥。JDK 中提供了 `CopyOnWriteArrayList ` 类比相比于在读写锁的思想又更进一步。为了将读取的性能发挥到极致,`CopyOnWriteArrayList ` 读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取操作。只有写入和写入之间需要进行同步等待。这样一来,读操作的性能就会大幅度提升。**那它是怎么做的呢?**
3737
3838### CopyOnWriteArrayList 是如何做到的?
3939
@@ -173,7 +173,7 @@ private static ArrayBlockingQueue<Integer> blockingQueue = new ArrayBlockingQueu
173173
174174## ConcurrentSkipListMap
175175
176- 下面这部分内容参考了极客时间专栏[ 《数据结构与算法之美》] ( https://time.geekbang.org/column/intro/126?code=zl3GYeAsRI4rEJIBNu5B/km7LSZsPDlGWQEpAYw5Vu0=&utm_term=SPoster " 《数据结构与算法之美》 ") 以及《实战 Java 高并发程序设计》。
176+ > 下面这部分内容参考了极客时间专栏[ 《数据结构与算法之美》] ( https://time.geekbang.org/column/intro/126?code=zl3GYeAsRI4rEJIBNu5B/km7LSZsPDlGWQEpAYw5Vu0=&utm_term=SPoster " 《数据结构与算法之美》 ") 以及《实战 Java 高并发程序设计》。
177177
178178为了引出 ` ConcurrentSkipListMap ` ,先带着大家简单理解一下跳表。
179179
0 commit comments