Java多线程编程实战指南:设计模式篇(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.8 参考资源

1. Brian Göetz. Java theory and practice: To mutate or not to mutate?(参见链接[3])

2. Brian Göetz et al. Java Concurrency In Practice. Addison Wesley,2006.

3. Mark Grand. Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition.Wiley, 2002.

4. Java Language Specification. 17.5. final Field Semantics.(参见链接[4])

5. Garbage collection and performance.(参见链接[5])

[1]实际上ConcurrentMap内部的确涉及锁的使用。这里只是为了展示车辆位置信息的改变是通过新建和替换整个Location实例来现实的。这个过程本身不涉及锁。

[2]之所以称之为“等效”,是因为CopyOnWriteArrayList的实例变量array是一个数组,而数组的各个元素的值是可替换的。因此,CopyOnWriteArrayList的实例变量array并非严格意义上的不可变对象。

[3]虽然CopyOnWriteArrayList的add方法为了保证复制实例变量array引用的老数组时的线程安全而使用了锁,但是只要对CopyOnWriteArrayList进行遍历时不加锁,就已经达到了其设计目标(即使其适用于遍历操作比修改操作更加频繁的场景)。