java 병발 (7) 라인 안전 및 불가변성
2533 단어 java 병발
우리는 변할 수 없는 공유 대상을 만들어서 대상이 온라인 스레드에서 공유될 때 수정되지 않도록 함으로써 스레드 안전을 실현할 수 있다.다음 예는 다음과 같습니다.
public class ImmutableValue{
private int value = 0;
public ImmutableValue(int value){
this.value = value;
}
public int getValue(){
return this.value;
}
}
ImmutableValue 클래스의 구성원 변수value는 구조 함수를 통해 값을 부여하고 클래스에 set 방법이 없습니다.이것은 ImmutableValue 실례가 생성되면value 변수는 더 이상 수정할 수 없다는 것을 의미합니다. 이것은 불가변성입니다.하지만 getValue () 방법으로 이 변수의 값을 읽을 수 있습니다.
(역자 참고: 변경되지 않음(Immutable)과 읽기 전용(Read Only)은 다릅니다.하나의 변수가 '읽기만' 일 때 변수의 값은 직접적으로 바꿀 수 없지만, 다른 변수가 바뀔 때 바꿀 수 있다.예를 들어 한 사람의 생년월일은'변하지 않는'속성이고 한 사람의 나이는'읽기만 하는'속성이지만'변하지 않는'속성이 아니다.시간의 변화에 따라 한 사람의 나이는 따라서 변화하지만, 한 사람의 생년월일은 변하지 않는다.이것이 바로'변하지 않는다'와'읽기만 한다'의 차이이다.(Java 및 모드 34장에서 발췌)
ImmutableValue 클래스의 예를 사용하려면value 변수를 얻은 후 새로운 실례를 만들어서 실행할 수 있습니다.value 변수에 대한 덧셈 작업의 예는 다음과 같습니다.
public class ImmutableValue{
private int value = 0;
public ImmutableValue(int value){
this.value = value;
}
public int getValue(){
return this.value;
}
public ImmutableValue add(int valueToAdd){
return new ImmutableValue(this.value + valueToAdd);
}
}
dd () 방법은 덧셈 작업의 결과를 새로운 ImmutableValue 클래스의 실례로 되돌려주는 것이지, 자신의value 변수를 직접 조작하는 것이 아닙니다.
인용은 라인이 안전하지 않습니다!
중요한 것은 한 대상이 라인이 안전한 불가변 대상일지라도 이 대상을 가리키는 인용은 라인이 안전하지 않을 수 있다는 것을 기억해야 한다.이 예를 보십시오.
public void Calculator{
private ImmutableValue currentValue = null;
public ImmutableValue getValue(){
return currentValue;
}
public void setValue(ImmutableValue newValue){
this.currentValue = newValue;
}
public void add(int newValue){
this.currentValue = this.currentValue.add(newValue);
}
}
Calculator 클래스는 ImmutableValue 인스턴스에 대한 참조를 가지고 있습니다.setValue () 방법과dd () 방법으로 이 인용을 바꿀 수 있음을 주의하십시오.따라서 Calculator 클래스 내부에 변할 수 없는 대상을 사용하더라도 Calculator 클래스 자체는 변할 수 있기 때문에 Calculator 클래스는 라인이 안전하지 않다.다시 말하면 ImmutableValue 클래스는 라인이 안전하지만, 클래스를 사용하는 것은 아닙니다.불가변성을 통해 라인의 안전을 얻으려고 시도할 때, 이 점은 명심해야 한다.
Calculator 클래스가 라인 안전을 실현하려면 getValue (), setValue (),dd () 방법을 동기화 방법으로 설명하면 됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 병발 (7) 라인 안전 및 불가변성우리는 변할 수 없는 공유 대상을 만들어서 대상이 온라인 스레드에서 공유될 때 수정되지 않도록 함으로써 스레드 안전을 실현할 수 있다.다음 예는 다음과 같습니다. 이것은 불가변성입니다.하지만 getValue () 방...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.