"Piggybacking" on synchronization

This synchronization is rarely advocated as a design pattern (probably with good reason), but I've definitely seen incorrectly synchronized production code that accidentally works by using it! Recall that the Java 5 definition of volatile states that access to a volatile variable synchronizes local copies of all cached variables with main memory. Therefore, it is occasionally possible to write to one variable without synchronization and then take advantage of subsequent synchronization on a different variable to ensure that main memory is updated with both variables.

Cases where this technique will work are essentially where:

Goetz et al (2006: 342-344) briefly discuss use of this technique in some of the Java class library code. The obvious problem with the method for general purpose use is that it may be quite difficult to demonstrate that it is correct in a given circumstance (and in most cases it will almost certainly not be correct...).


If you enjoy this Java programming article, please share with friends and colleagues. Follow the author on Twitter for the latest news and rants.

Editorial page content written by Neil Coffey. Copyright © Javamex UK 2021. All rights reserved.