> Java > java지도 시간 > 자바 잠금이란 무엇입니까?

자바 잠금이란 무엇입니까?

青灯夜游
풀어 주다: 2019-11-15 16:24:20
원래의
5392명이 탐색했습니다.

자바 잠금이란 무엇입니까?

Lock은 Java 동시 프로그래밍에서 가장 중요한 동기화 메커니즘입니다. 잠금은 java.util.concurrent 패키지 아래의 관련 클래스와 동기화된 키워드를 통해 JAVA에서 구현됩니다.

Java의 잠금 개념

스핀 잠금: 스레드가 잠금을 획득할 때 다른 스레드가 잠금을 획득한 경우 스레드는 루프에서 대기한 다음 잠금이 가능한지 지속적으로 결정합니다. 성공적으로 획득되면 잠금이 획득될 때까지 루프가 종료되지 않습니다.

낙관적 잠금: 데이터 수정 시 이전에 획득한 데이터와 일치하지 않는 것으로 확인되면 최신 데이터를 읽고 수정 후 다시 수정을 시도합니다. 동시성 충돌이 발생하고 데이터에 대한 모든 관련 작업이 동기화됩니다. , 잠금은 데이터 읽기부터 시작됩니다

독점 잠금(쓰기): 리소스에 쓰기 잠금을 추가합니다. 잠금을 소유한 스레드는 리소스를 수정할 수 있습니다. 다시 잠그세요(단일 쓰기)

공유 잠금(읽기): 리소스에 읽기 잠금을 추가한 후에는 읽기만 가능하고 수정할 수 없습니다. 다른 스레드는 읽기 잠금만 추가할 수 있고 쓰기 잠금(다중 읽기)은 추가할 수 없습니다. 재진입 잠금: 스레드가 잠금을 획득한 후 동일한 잠금에 자유롭게 들어갈 수 있습니다.

비재진입 잠금: 스레드가 잠금을 얻은 후에는 동일한 잠금에 동기화된 코드에 자유롭게 들어갈 수 없습니다.

공정한 잠금: 잠금 경쟁 순서는 선착순입니다

Non Fair 잠금: 잠금 경쟁 순서는 선착순이 아닙니다

몇 가지 중요 Java의 잠금 구현 방법:

synchronized, ReentrantLock, ReentrantReadWriteLock

동기화 키워드: synchronized

잠금 범위: 객체 잠금, 클래스 잠금, 분산 잠금

동기화 기능: 재진입, 배타적, 비관적 잠금

잠금 최적화: 잠금 제거는 가상 머신 JIT(Just-In-Time) 컴파일러가 실행 중일 때 일부 코드에서 동기화가 필요하지만 동기화할 가능성이 없는 것으로 감지되는 잠금을 제거하는 잠금 최적화 방법입니다. 공유 데이터 경쟁(잠금 제거를 활성화하는 매개변수: -xx:+DoEscapeAnalytic -XX:+EliminateLocks)

잠금 조대화: 어떤 경우에는 많은 잠금 요청으로 인한 성능 손실을 줄이기 위해 많은 잠금 요청을 하나의 요청으로 병합하고 싶습니다. 단시간 내에 잠금 요청, 동기화 및 해제를 완료

참고: 동기화 키워드는 동기화를 구현할 뿐만 아니라 JMM에서는 동기화가 가시성을 보장해야 한다고 규정합니다(캐시할 수 없음)

동기화 사용 코드 예:

public class Counter {
private static int i = 0;
// 等价于 synchronized(this)
public synchronized void update() {
i++;
}
public void updateBlock() {
synchronized (this) {
i++;
}
}
// 等价于 synchronized (Counter.class)
public static synchronized void staticUpdate() {
i++;
}
public static void staticUpdateBlock() {
synchronized (Counter.class) {
i++;
}
}
}
로그인 후 복사

위 내용은 자바 잠금이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿