자바 스 레 드 동기 화 (2)

2034 단어 자바
2. 스 레 드 와 안전 한 키워드 volatile, final, static
(1) volatile: 이 키 워드 는 다른 스 레 드 에 볼 수 있 는 변 수 를 확보 하고 가시 적 인 문 제 를 해결 할 수 있 습 니 다.Counter 류 를 다음 과 같이 수정 하면 원자 문제 가 존재 하지 않 지만 가시 적 인 문제 가 존재 합 니 다.

public class Counter {
	
	private int counter;

	public synchronized int getCounter() {
		return counter;
	}

	public synchronized void setCounter(int counter) {
		this.counter = counter;
	}
}

예 를 들 어 다른 스 레 드 가 setCounter 방법 을 호출 하여 conter 의 값 을 5 로 수정 한 후에 다른 스 레 드 가 getCounter 방법 으로 conter 의 값 을 가 져 오 면 반드시 5 를 가 져 오 는 것 은 아 닙 니 다.그러나 counter 의 성명 에 volatile 키 워드 를 추가 하면 가시 적 인 문 제 를 해결 할 수 있 습 니 다. 한 라인 이 다른 라인 이 상태 에 대한 변 화 를 볼 수 있 도록 확보 할 수 있 습 니 다.

public class Counter {
	
	private volatile int counter;

	public int getCounter() {
		return counter;
	}

	public void setCounter(int counter) {
		this.counter = counter;
	}
}
(2) final 키워드: 이 키 워드 는 주로 가 변 적 이지 않 은 상 태 를 보조 적 으로 만 드 는 데 사 용 됩 니 다. 대상 이 올 바 르 게 구축 되 었 다 면 (사실 대상 이 어떻게 올 바 르 게 구축 되 었 는 지, 이것 은 복잡 한 주제 입 니 다. 쉽게 말 하면 구조 함수 에서 this 를 다른 스 레 드 에 노출 시 키 지 마 십시오) final 수식 의 키워드 값 은 모든 다른 스 레 드 에 볼 수 있 습 니 다.동시에 한 대상 의 상 태 는 변 하지 않 기 때문에 여러 스 레 드 에서 이 대상 을 사용 하 는 것 도 스 레 드 가 안전 합 니 다.

public class Counter {
	
	private final int counter;

	public Counter() {
		this.counter = 5;
	}
	
	public int getCounter() {
		return counter;
	}
}

(3) static 키워드, static 수식 변수 나 코드 블록 에 있 는 변 수 를 초기 화하 면 초기 화 끝 날 때 까지 의 작업 상 태 를 확보 할 수 있 습 니 다. 다른 스 레 드 에 대해 서 는 볼 수 있 지만 대상 의 상태 가 달라 질 경우 같은 단계 가 필요 합 니 다.정적 초기 화 는 JVM 이 완 성 된 것 으로 클래스 의 초기 단계, 즉 클래스 가 불 러 온 후 클래스 가 임의의 스 레 드 로 사용 되 기 전에 발생 합 니 다.JVM 은 초기 화 기간 에 자 물 쇠 를 가 져 와 야 합 니 다. 이 자 물 쇠 는 스 레 드 마다 한 번 이상 사용 되 어 하나의 클래스 가 불 러 왔 는 지 확인 합 니 다.이 자 물 쇠 는 정적 초기 화 기간 동안 메모리 에 기 록 된 결 과 를 자동 으로 모든 스 레 드 를 볼 수 있 도록 합 니 다.

좋은 웹페이지 즐겨찾기