Ключевое слово synchronized
и объекты Lock
используются для достижения синхронизации в Java.Synchronized
работает с механизмами монитора, которыми обладает каждый Object
в Java, в то время как блокировка - это более простой объект, который является строительным блоком монитора.я считаю, что в основном вопрос заключается в разнице между монитором и замком.
Блокировка, такая как semaphore
, представляет собой простой механизм, который может обеспечить синхронизацию только путем взаимного исключения.Если один поток получил (lock.acquire()
) конкретную блокировку, никакой другой поток не сможет получить такую же блокировку, пока первый поток не снимет ее (lock.release()
).Монитор с другой стороны действует не только на взаимное исключение, но и на переменные условия.В сценарии, когда поток T1
входит в монитор объекта, поток T2
намеревается войти в тот же монитор, T2
будет ожидать, пока T1
не выйдет из монитора, и в современной JVM T2
фактически введет монитор вправопосле выхода T1
.