Double-checked locking
Reports double-checked locking.
Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization. Unfortunately it is not thread-safe when used on a field that is not declared volatile
. When using Java 1.4 or earlier, double-checked locking doesn't work even with a volatile
field. Read the article linked above for a detailed explanation of the problem.
Example:
class Foo {
private Helper helper = null
Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null) {
helper = new Helper()
}
}
}
return helper;
}
}
Inspection options
Option | Type | Default |
---|---|---|
Ignore double-checked locking on volatile fields | Checkbox | false |
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Groovy, 233.SNAPSHOT |
Last modified: 13 July 2023