자바 병렬 프로그래밍 실전 - 제3장 대상의 공유
3369 단어 Java 동시 프로그래밍 실전
가시성 표시(Memory Visibility)란 읽기 작업의 스레드에서 다른 스레드가 쓴 값을 볼 수 있음을 의미합니다.가시성을 확인하려면 동기화를 사용해야 합니다.(동기화되지 않은 조건에서 컴파일러, 프로세서, 실행할 때 작업의 실행 순서를 다시 정렬할 수 있다)
실효 데이터: 동기화되지 않은 프로그램에서 실효 데이터가 발생할 수 있습니다.
비원자 64비트 작업: Java 메모리 모델에서는 변수의 읽기 또는 쓰기가 원자여야 합니다.그러나 volatile이 아닌 64비트의 롱과 더블, JVM은 64비트의 읽거나 쓰기를 두 32비트로 분해할 수 있다.다중 루틴 프로그램에서 공유되고 가변적인 롱과 더블 변수를 사용하는 것은 안전하지 않습니다. 키워드volatile로 보호자나 자물쇠를 설명해야 합니다.
자물쇠 추가와 가시성: 자물쇠 추가는 한 라인이 예측 가능한 방식으로 다른 라인의 실행 결과를 볼 수 있도록 보장할 수 있다. 동기화 코드 블록과 동기화 방법은 원자적인 방식으로 조작을 실행할 수 있을 뿐만 아니라동기화는 메모리의 가시성을 확보할 수 있다.
volatile 변수: 다음 조건을 모두 충족하는 경우에만volatile 변수를 사용해야 합니다.
스레드 닫기(Thread Confinement)는 가변 데이터를 공유하지 않지만 스레드에 닫힌 객체가 스레드에서 빠져나오지 않도록 합니다.
개체가 작성된 후 상태를 수정할 수 없는 경우 개체는 불변 개체입니다.불변 대상은 라인이 안전하고 동기화가 필요 없으며 임의로 발표할 수 있습니다.불변 객체는 다음 조건을 충족해야 합니다.
예: 아래의 Person 대상은 변할 수 없습니다. (clone () 방법을 사용했고birthday 변수가 발표되지 않았습니다.)
public class Person {
private final String id;
private final String name;
private final Date birthday;
public Person(String id, String name, Date birthday) {
this.id = id;
this.name = name;
this.birthday = (Date)birthday.clone();
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public Date getBirthday() {
return (Date)birthday.clone();
}
}
보안 게시 소프트 객체는 보안 게시를 통해 게시되어야 합니다. 일반 모드:
객체의 게시 요구사항은 객체의 가변성에 따라 달라집니다.
병렬 프로그램에서 대상을 사용하고 공유할 때 실용적인 정책
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Java 병행 프로그래밍 실전] ---"J.U.C": AQS 분석(二): 자물쇠 획득, 방출acquire (int arg): 단독 모드로 대상을 가져오고 중단을 무시합니다. acquireInterruptibly (int arg): 단독 모드로 대상을 가져오고, 중단되면 중단합니다. acquireShared...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.