JDK-6625725 (coll) modCount should not be volatileCollections use a modCount field to track changes to data structures, so they can throw ConcurrentModificationException if another thread unexpectedly modifies the collection (rather than corrupting the data and carrying on).
Some collections mark modCount as volatile; some do not. Since the modCount mechanism comes with no guarantees, and users of single-threaded collections do not expect to pay the (high) price of a volatile write on every modification operation, the volatile modifier should be removed.
Here are the uses of volatile to be removed:
./java/util/HashMap.java:177: transient volatile int modCount; ./java/util/IdentityHashMap.java:176: private transient volatile int modCount; ./java/util/WeakHashMap.java:185: volatile int modCount;
简单来说就是没必要,如果用户是单线程的,volatile 写操作代价太大了。
而且如果没有正确modify的话 典型如 一个线程在遍历,另一个线程在修改这种情况,我们会抛出ConcurrentModificationException 来提示用户修改。