상태 의존적인 클래스

이번 장에서는 상태 종속성을 만들어 낼 수 있는 여러 가지 방법에 대해서 알아보고, 자바 플랫폼에서 제공하는 상태 종속성에 적용되는 여러 가지 규칙에 대해서도 살펴본다.

14.1 상태 종속성 관리

순차적으로 동작하는 프로그램은 상태 기반 선행 조건이 만족되지 않는다면 반드시 오류가 발생한다. 병렬 프로그램에서 상태 기반 선행 조건은 다른 스레드를 통해서 언제든지 변경될 수 있다.

병렬 객체의 상태 종속적인 메서드는 선행 조건이 만족되지 않았을 때 오류가 발생하는 문제를 비켜날 수도 있지만, 비켜나는 일보다는 선행 조건을 만족할 때까지 대기하는 경우가 많아진다.

상태 종속적인 블로킹 작업

프로듀서-컨슈머 패턴

14.1.1 [예제] 선행 조건 오류를 호출자에게 그대로 전달

@ThreadSafe
public class GrumpyBoundedBuffer <V> extends BaseBoundedBuffer<V> {
    public GrumpyBoundedBuffer() {
        this(100);
    }

    public GrumpyBoundedBuffer(int size) {
        super(size);
    }

    public synchronized void put(V v) throws BufferFullException {
        if (isFull())
            throw new BufferFullException();
        doPut(v);
    }

    public synchronized V take() throws BufferEmptyException {
        if (isEmpty())
            throw new BufferEmptyException();
        return doTake();
    }
}