「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 6)
Balking 패턴
balk란, 그만두고 돌아가는 것. 야구의 보크도 balk. Balking 패턴에도 Guarded Suspension 패턴과 마찬가지로 가드 조건이 등장한다. Balking 패턴에서는 가드 조건이 충족되지 않으면 즉시 중단한다. 이것이 실행 가능한 상태가 될 때까지 기다리는 Guarded Suspension 패턴과의 차이.
에디터의 자동 저장 기능 같은 것을 생각한다. 현재의 데이터의 내용을 정기적으로 파일에 기입하는 처리를 하는 thread가 있다. 데이터 내용이 업데이트될 때만 저장합니다. 데이터의 내용에 차이가 있는 것을 가드 조건으로 하고, 차이가 없으면 파일에 기입하는 처리를 실시하지 않고 돌아간다(balk한다).
(코드 전체는 본서를 참조)
...
public synchronized void change(String newContent) {
content = newContent;
changed = true;
}
public synchronized void save() throws IOException {
if (!changed) { // 変更されていなければ
return; // balkする
}
doSave();
changed = false;
}
...
등장인물
GuardedObject 역할은 가드된 메소드(guardedMethod)를 가지고 있는 클래스. 가드 조건이 충족되면 즉시 실행하고, 충족되지 않으면 실제 처리로 이동하지 않고 돌아갑니다. GuardedObjec 역할은 인스턴스의 상태를 변경하는 메서드(stateChangingMethod)를 가질 수 있다. 샘플 프로그램에서는 Data 클래스가 이 역할을 맡고, save 메소드가 guardedMethod, change 필드가 stateChangingMethod에 대응한다.
어떤 때 사용하는지
...
public synchronized void change(String newContent) {
content = newContent;
changed = true;
}
public synchronized void save() throws IOException {
if (!changed) { // 変更されていなければ
return; // balkする
}
doSave();
changed = false;
}
...
...
public synchronized void init() {
if (initialized) {
return;
}
doInit();
initialized = true;
}
initialized 필드와 같이, 「단 한 번만 상태가 변화하는 변수」를, 일반적으로 래치(latch: 래치)라고 부른다.
타임아웃
Balking 패턴과 Guarded Suspension 패턴의 중간으로서, 가드 조건을 만족할 때까지 일정 시간 기다리는 대처 방법이 있다. 가드 조건을 만족할 때까지 일정 시간이 지나고 아직 조건이 충족되지 않은 경우에는 balk라고 하는 처리를 guarded timed 혹은 timeout이라고 부른다.
obj.wait(1000) // 1000ミリ秒待つ
하지만 Java는 notify/notifyAll되었는지 타임아웃했는지를 구별할 방법이 없다.
관련
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 1)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 2)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 3)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 4)
「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 5)
Reference
이 문제에 관하여(「Java 언어로 배우는 디자인 패턴 (멀티 스레드 편)」정리 (그 6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshi-yoshi/items/38187c25619a173ea8b8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)