RFR (XS) 8145539: (coll) AbstractMap.keySet and .values should not be volatile

Paul Sandoz paul.sandoz at oracle.com
Thu Dec 17 17:21:39 UTC 2015


> On 17 Dec 2015, at 16:54, Aleksey Shipilev <aleksey.shipilev at oracle.com> wrote:
> 
> On 12/17/2015 06:07 PM, Doug Lea wrote:
>> On 12/16/2015 05:53 PM, Aleksey Shipilev wrote:
>>> Since the dawn of OpenJDK, AbstractMap.keySet and .value were defined as
>>> package-private volatile fields. Their only use is to cache keySet and
>>> valueSet implementations from java.util collections.
>> 
>> I think these were declared volatile to be more clearly JMM compliant.
>> They are definitely OK without it, but you should probably add some
>> rationale in documentation, mentioning that all java.util.Map view class
>> implementations using these fields have no non-final fields (or any
>> fields at all except for outer-this).
> 
> Good idea, did so:
> http://cr.openjdk.java.net/~shade/8145539/webrev.04/
> 
> (There is also an @implSpec on keySet() and values() that say no
> synchronization is performed)
> 

+1

Paul.



More information about the core-libs-dev mailing list