provides synchronization for multiple threads.