This document discusses techniques for testing multithreaded Java applications for synchronization problems. It begins by explaining why multithreading is used and the new types of defects that can arise, such as deadlocks, livelocks, and race conditions. It then covers various testing techniques like load/stress testing, testing specific thread interleavings, testing all possible interleavings, and using instrumentation. It provides examples of tools that can be used for each technique and recommends books on the topic.