>  기사  >  Java  >  Java 잠금에 관한 인터뷰 질문 분석 예

Java 잠금에 관한 인터뷰 질문 분석 예

WBOY
WBOY앞으로
2023-05-05 08:13:061422검색

1. 정적 메서드와 비정적 메서드에 대한 동기화 효과의 차이점

비정적 메서드:

객체 잠금(이 객체의 메모리를 잠그는 것으로 이해될 수 있습니다. 이 메모리만이라는 점에 유의하세요. 다른 유사한 객체는 자체 메모리 잠금을 갖습니다) 이때 둘 이상의 다른 스레드에서 객체의 동기화 방법을 실행하면(참고: 객체입니다) 상호 배제가 생성됩니다

정적 방법: 잠금을 추가하는 것과 동일 클래스에 (*.class 코드 영역에 위치하며 정적 메소드는 정적 영역에 위치합니다. 이 클래스에 의해 생성된 객체는 이 정적 메소드를 공유하므로 N개의 객체가 이 메모리를 두고 경쟁합니다.)

이때, 이 클래스에 의해 생성된 객체이므로 이 정적 메서드를 상호 배제라고 합니다. 항상 발생합니다. 즉, 이 클래스의 모든 객체는 잠금을 공유합니다.

2. 잠금의 유형은 무엇입니까

(1) 낙관적 잠금 및 비관적 잠금

(2) 스핀 잠금 및 비스핀 잠금

(3) 재진입 잠금 및 비재진입 잠금

( 4 ) Lock-free & Lightweight Locks & Biased Locks & Heavyweight Locks

(5) 상호 배제 잠금 및 공유 잠금

(6) 공정한 잠금 및 불공정 잠금

3. 여러 가지 스레드 동기화 방법

동기화된 수정

휘발성은 동기화를 달성합니다(원자성은 보장되지 않고 가시성만 보장됨)

로컬 변수 ThreadLocal 사용

원자성 클래스 사용(AtomicInteger, AtomicBoolean...)

Lock 사용

컨테이너 클래스(BlockingQueue), ConcurrentHashMap 사용

4. 동기화 메커니즘과 잠금 메커니즘의 차이점

synchronized는 원래 CPU 비관적 잠금 메커니즘을 사용했습니다. 즉, 스레드가 배타적 잠금을 얻습니다. 배타적 잠금은 다른 스레드가 스레드가 잠금을 해제할 때까지 기다리기 위해 차단에만 의존할 수 있음을 의미합니다.

Lock은 낙관적 잠금 방법을 사용합니다. 소위 낙관적 잠금은 충돌이 없다고 가정하고 매번 잠금을 수행하지 않고 작업을 완료하는 것입니다. 충돌로 인해 실패하면 성공할 때까지 재시도합니다. 낙관적 잠금으로 구현된 메커니즘은 CAS 작업(비교 및 교환)입니다.

5. 스레드 안전성 문제에 대해 이야기해 보겠습니다.

스레드 안전성은 멀티스레딩 분야에서 간단히 말해 멀티스레딩에서 사용할 수 있는 메서드 또는 인스턴스로 이해하면 됩니다. 문제 없는 환경.

Java 다중 스레드 프로그래밍에서는 Java 스레드 안전성을 달성하는 여러 가지 방법이 제공됩니다.

가장 간단한 방법은 동기화 키워드를 사용하는 것입니다.

AtomicInteger와 같은 java.util.concurrent.atomic 패키지의 원자 클래스를 사용합니다.

java.util.concurrent.locks 패키지의 잠금을 사용하세요

스레드로부터 안전한 컬렉션 ConcurrentHashMap을 사용하세요

변수 가시성을 보장하기 위해 휘발성 키워드를 사용하세요

위 내용은 Java 잠금에 관한 인터뷰 질문 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제