Synchronization on an object initialized with a literal
Reports synchronized
blocks that lock on an object initialized with a literal.
String literals are interned and Character
, Boolean
and Number
literals can be allocated from a cache. Because of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually holding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private.
Example:
class Main {
final String mutex = "Mutex";
void method() {
synchronized (mutex) {
}
}
}
Use the Warn on all possible literals option to report any synchronization on String
, Character
, Boolean
and Number
objects.
Inspection options
Option | Type | Default |
---|---|---|
Warn on all possible literals | Checkbox | false |
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Java, 233.SNAPSHOT |
Last modified: 13 July 2023