Back to Error Prone

LockOnBoxedPrimitive

docs/bugpattern/LockOnBoxedPrimitive.md

2.49.0599 B
Original Source

Instances of boxed primitive types may be cached by the standard library valueOf method. This method is used for autoboxing. This means that using a boxed primitive as a lock can result in unintentionally sharing a lock with another piece of code.

Consider using an explicit lock Object instead of locking on a boxed primitive. That is, prefer this:

java
private final Object lock = new Object();

void doSomething() {
  synchronized (lock) {
    // ...
  }
}

instead of this:

java
private final Integer lock = 42;

void doSomething() {
  synchronized (lock) {
    // ...
  }
}