[concurrency-interest] Double Checked Locking in OpenJDK

Dmitry Vyazelenko vyazelenko at yahoo.com
Sun Aug 12 15:48:48 EDT 2012


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




More information about the Concurrency-interest mailing list