Lock은 인터페이스이며 가장 일반적으로 사용되는 구현은 ReentrantLock입니다. 그 유연성 중 하나는 공정한 매개변수를 설정할 수 있다는 것입니다.
synchronized 및 fair=false인 ReentrantLock은 잠금 순서를 결정할 수 없습니다. 즉, 스레드 A, B, C는 모두 A에서 처음으로 개체를 잠그고 그 다음 B, 마지막으로 C입니다. 그런 다음 A가 개체의 잠금을 해제하면 B 또는 C가 잠길지 결정할 수 없습니다. 다음 개체.
fair=true ReentrantLock(공정한 잠금)을 사용하면 상황이 결정됩니다. A가 객체의 잠금을 해제하면 B가 C보다 먼저 객체를 잠그려고 시도하므로 B는 다음에 객체를 잠그고 B가 잠금을 해제할 때만 회전합니다. C에게
Lock은 인터페이스이며 가장 일반적으로 사용되는 구현은 ReentrantLock입니다. 그 유연성 중 하나는 공정한 매개변수를 설정할 수 있다는 것입니다.
synchronized 및 fair=false인 ReentrantLock은 잠금 순서를 결정할 수 없습니다. 즉, 스레드 A, B, C는 모두 A에서 처음으로 개체를 잠그고 그 다음 B, 마지막으로 C입니다. 그런 다음 A가 개체의 잠금을 해제하면 B 또는 C가 잠길지 결정할 수 없습니다. 다음 개체.
fair=true ReentrantLock(공정한 잠금)을 사용하면 상황이 결정됩니다. A가 객체의 잠금을 해제하면 B가 C보다 먼저 객체를 잠그려고 시도하므로 B는 다음에 객체를 잠그고 B가 잠금을 해제할 때만 회전합니다. C에게
으아아아
으아아아Lock
의 잠금 및 잠금 해제는 Java 의미 수준에서 구현되며 잠금 간에는 필수 관계가 없습니다synchronized
잠금 해제는 JVM에 의해 구현됩니다.synchronized
블록을 실행한 후에는 모두synchronized
의 중첩 순서에 따라 잠금이 해제됩니다.