자바 다 중 스 레 드 모드 의 Balking Pattern

balking:필요 없 으 면 그만 두 세 요. 간단 한 소개  지금 이 조작 이 적합 하지 않 거나 이 조작 을 할 필요 가 없 을 때 이 조작 을 포기 하고 돌아 갑 니 다. 언제  1.굳이 집행 할 필요 가 없 을 때   아래 의 인 스 턴 스 와 같이 Content 필드 의 내용 이 바 뀌 지 않 았 을 때 save 방법 balk 에서 살 았 습 니 다.   콘 텐 츠 의 내용 이 파일 에 적 혀 있 기 때문에 한 번 더 쓸 필요 가 없고 프로그램의 성능 을 향상 시 킬 수 있 습 니 다.  2.경계 조건 이 성립 될 때 까지 기다 리 고 싶 지 않다   경계 조건 이 성립 되 지 않 으 면 바로 물 러 나 바로 다음 작업 을 진행한다.프로그램의 응답 성 을 높이다  3.경계 조건 은 1 차 창설 시   아래 의 Something 클래스 와 같이 initialized 가 true 일 때 직접 return 으로 종료 합 니 다.   initialized 가 false 일 때 실제 초기 화 작업 을 하고,이어서 initialized 를 true 로 설정 합 니 다
import java.io.IOException;
import java.io.FileWriter;
import java.io.Writer;

public class Data {
    private String filename;    //      
    private String content;     //      
    private boolean changed;    //            ,  true

    public Data(String filename, String content) {
        this.filename = filename;
        this.content = content;
        this.changed = true;
    }

    //       
    public synchronized void change(String newContent) {        
        content = newContent;                                   
        changed = true;                                           
    }                                                           

    //       ,       
    public synchronized void save() throws IOException {      
        if (!changed) {                                           
            System.out.println(Thread.currentThread().getName() + " balks");
            return;                                             
        }                                                       
        doSave();                                             
        changed = false;                                          
    }                                                           

    //               
    private void doSave() throws IOException {
        System.out.println(Thread.currentThread().getName() + " calls doSave, content = " + content);
        Writer writer = new FileWriter(filename);
        writer.write(content);
        writer.close();
    }
}


public class Something {
    private boolean initialized = false;
    public synchronized void init() {
        if (initialized) {
            return;
        }
        doInit();
        initialized = true;
    }
    private void doInit() {
        //         
    }
}

좋은 웹페이지 즐겨찾기