Synchronization methods in multithreading