Attempts to synchronize on an instance of a value-based class will produce compile-time warnings and raise run-time exceptions starting from Java 16.

For example, java.lang.Double is annotated with jdk.internal.ValueBased, so the following code will produce a compile-time warning

Double d = 20.0;
synchronized (d) { ... } // javac warning

Since 2021.1