Describe how you would handle thread safety and synchronization in a high-throughput, multi-threaded Java application.