Describe how you would implement thread safety in a multi-threaded Java application using synchronization and concurrent collections.