Inspectopedia Help

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