What is synchronization in respect to multi-threading in Java?