We stated at the beginning of Chapter 2 that writing correct concurrent programs is primarily about managing access to shared, mutable state. That chapter was about using synchronization to prevent multiple threads from accessing the same data at the same time; this chapter examines techniques for sharing and publishing objects so they can be safely accessed by multiple threads. Together, they lay the foundation for building thread-safe classes and safely structuring concurrent applications using the
java.util.concurrent library classes.
We have seen how
synchronized blocks and methods can ensure that operations execute atomically, but it is a common misconception that
synchronized is only about atomicity or demarcating ...