자원 경쟁이 별로 치열하지 않을 때에는 싱크로나이즈드의 성능이 ReetrantLock보다 좋지만, 자원 경쟁이 치열할 때에는 싱크로나이즈드의 성능이 수십배 떨어지지만 ReetrantLock의 성능은 정상적으로 유지될 수 있습니다
(1) 왜 이런가요?
(2) ReentrantLock은 경량 잠금 장치인가요? 경량 자물쇠란 무엇입니까? 이름만 들어봤을 뿐, 구체적인 구현을 본 적은 없습니다
동기화를 사용할 때 프로그램이 잘못 실행되면 예외가 발생하지만 정리 작업은 수행되지 않습니다. ReentrantLock을 사용하면 잠금을 획득하려고 시도하지만 궁극적으로 획득하지 못하게 되므로 다른 사람이 잠금을 획득한 경우 다른 작업을 수행하기 위해 나갈 수 있습니다(그러나 지금 하고 싶은 것은 잠금을 획득한 후 특정 작업을 수행하는 것입니다) ) , 잠금이 해제될 때까지 기다리는 대신 지금 다른 작업을 수행하도록 전환하는 것은 별 의미가 없는 것 같습니다.
먼저 언급하신 상황은 Java 1.5에서 ReentrantLock이 처음 도입되었을 때만 발생했습니다. Java 1.6에서는 기본적으로 ReentrantLock의 구현과 일치하는 동기화 구현 알고리즘을 수정했기 때문에 둘 사이의 성능 차이는 이미 매우 작습니다. .
경량 잠금과 관련하여 이는 Java 1.6에 도입된 잠금 성능을 향상시키는 방법입니다. JVM 수준에 속하며 구체적인 구현이 없습니다.
잠금이 해제될 때까지 기다리려면 Lock.lock()을 사용하여 잠금을 얻을 수 있습니다. Lock.tryLock()을 사용하면 잠금을 얻으려고 시도하지만 잠금을 얻지 못할 수도 있습니다.
동기화된 읽기 및 쓰기 페이지는 상호 배타적이라고 간단히 이해할 수 있지만 ReentrantLock에는 읽기 잠금과 쓰기 잠금이 공유될 수 있지만 쓰기 잠금은 상호 배타적입니다. 적게 쓰면 성능은 훨씬 높아지지만 코드가 동기화보다 복잡하고 제어가 좋지 않으면 문제가 발생하기 쉽습니다.