Home  Synchronization and concurrency  ConcurrentHashMap  Atomic variables

"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 a synchronization action (either via the synchronized keyword or, as of Java 5, an 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 we know that Thread A will write to the variables and Thread B (and possibly other threads) will read them, but where we know there won't be concurrent writes by multiple threads. 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...).


Written by Neil Coffey. Copyright © Javamex UK 2008. All rights reserved.