[concurrency-interest] Double Checked Locking in OpenJDK

Ruslan Cheremin cheremin at gmail.com
Sun Aug 12 16:53:32 EDT 2012


First of all, Path is immutable, so DCL is safe here even without
volatile. Volatile here is not required from my point of view.



2012/8/12 Dmitry Vyazelenko <vyazelenko at yahoo.com>:
> Hi Richard,
>
> The variable "filePath" is volatile, so the double-checked locking is correct in this case. It would have been a bug prior to Java 5.
>
> Best regards,
>
> Dmitry Vyazelenko
>
> On Aug 12, 2012, at 21:35 , Richard Warburton <richard.warburton at gmail.com> wrote:
>
>> Hello,
>>
>> The current implementation of java.io.File::toPath [0] appears to be
>> using the double checked locking pattern:
>>
>>     public Path toPath() {
>>         Path result = filePath;
>>         if (result == null) {
>>             synchronized (this) {
>>                 result = filePath;
>>                 if (result == null) {
>>                     result = FileSystems.getDefault().getPath(path);
>>                     filePath = result;
>>                 }
>>             }
>>         }
>>         return result;
>>     }
>>
>> I was going to report the bug, but I'm a little uncertain of the
>> interaction between the local variable 'result' and DCL since I've
>> previously only seen the checking condition on the shared field
>> itself.  Can someone here either confirm that its a bug or explain how
>> the 'result' variable is fixing things?
>>
>> regards,
>>
>>  Richard
>>
>> [0] See the end of
>> hg.openjdk.java.net/jdk8/jdk8/jdk/file/da8649489aff/src/share/classes/java/io/File.java
>> _______________________________________________
>> Concurrency-interest mailing list
>> Concurrency-interest at cs.oswego.edu
>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>
>
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest


More information about the Concurrency-interest mailing list