인터뷰 질문:
Java의 잠금에 대해 아는 것이 있나요? 자물쇠에는 어떤 종류가 있나요? 그들 사이의 차이점은 무엇입니까? 말해 주세요.
(동영상 공유 학습: java 동영상 튜토리얼)
답변:
은 대략 다음과 같은 점으로 나눌 수 있습니다: 자물쇠란 무엇이며, 무엇을 위해 사용되며, 자물쇠 유형은 무엇입니까? 그리고 잠금 간의 차이점도 있습니다.
1: 자물쇠는 무엇이고 어떤 용도로 사용되나요?
잠금은 주로 리소스 공유 동기화를 달성하는 데 사용됩니다. 잠금을 획득한 후에만 동기화 코드에 액세스할 수 있습니다. 그렇지 않으면 다른 스레드가 잠금 사용을 완료하여 잠금을 해제할 때까지 기다립니다.
2: 어떤 종류의 자물쇠가 있나요?
여기서 주요 초점은 동기화와 잠금입니다(인터뷰에서는 이 두 가지에 대해 묻기 때문입니다).
synchronize: 메서드 앞에 배치할 수도 있지만 코드 블록 앞에 배치할 수도 있지만 잠긴 개체를 지정해야 합니다. 일반적으로 wait, inform, informAll과 함께 사용됩니다. wait: 보유된 객체 잠금을 해제하고 CPU를 해제합니다. sleep: CPU를 해제하지만 보유하고 있는 객체 잠금은 해제하지 않습니다.
notify: 액세스 잠금을 얻을 수 있도록 대기 대기열에 있는 스레드를 깨웁니다.
notifyAll: 대기 대기열에서 객체 잠금을 기다리고 있는 모든 스레드를 깨우고 잠금을 얻기 위해 경쟁하게 합니다.
Lock: 동기화와 동일한 의미를 갖지만 인터럽트 잠금 대기 및 시간 제한 잠금 대기와 같은 몇 가지 다른 기능을 추가하므로 동기화 대신 잠금을 사용할 수 있습니다. 제공되는 방법은 다음과 같습니다.
(자세한 인터뷰 질문에 대한 권장 사항: java 인터뷰 질문 및 답변)
lock(): 차단 방식으로 잠금을 획득하고 잠금이 해제될 때까지 기다립니다. 획득하고 중단되지 않습니다.
tryLock(): 얻으면 true를 반환하고, 얻지 못하면 false를 반환합니다.
tryLock(long timeout, TimeUnit 단위): 얻으면 true를 반환하고, 얻지 못하면 주어진 시간 동안 기다리고, 얻지 못하면 false를 반환합니다.
lockInterruptible(): 잠금과 유사하지만 잠금이 획득되지 않은 경우 잠금이 획득되거나 현재 스레드가 다른 스레드에 의해 중단될 때까지 휴면 상태에 들어갑니다.
셋:둘의 차이점은 무엇인가요?
일관되지 않은 성능: 리소스 경쟁이 동기가 되면 잠금 성능이 동기화보다 좋습니다. 경쟁이 동기가 없으면 동기화 성능이 잠금보다 좋습니다.
잠금 메커니즘은 다릅니다. 동기화는 JVM 수준에서 구현되며 시스템은 잠금 해제 여부를 모니터링합니다. 잠금은 코드로 구현되며 finally 블록에서 수동으로 해제해야 합니다. 잠금은 비차단 방식으로 획득할 수 있습니다.
사용법이 다릅니다. 동기화는 코드 블록 및 메서드에서 사용할 수 있습니다. 잠금은 코드를 통해 구현되며 더 정확한 스레드 의미를 갖습니다.
관련 권장 사항: Java 입문 튜토리얼
위 내용은 자바 인터뷰 잠금의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!