From what I've understood, since the JVM can (and will) cache and reuse wrapper instances, locking on such objects isn't recommended. Consider locking on instances of Long in several classes: if instances are shared across the application two synchronized-blocks might block each other even if they do not share locks. Depending on the implementation this can cause unexpected behaviours and deadlocks.