import java.awt.*; /** 在庫を保持している倉庫みないなもの */ class Stock extends IntLabel{ private static final int max=30; Stock(Label lb){ super(lb); } /** 棚が満杯ならその旨を返事 */ boolean full(){ return get()>=max; } /** 空ならその旨を返事.負になることはありえないはず */ boolean empty(){ return get()<=0; } /** 在庫が1個引き出される場合に呼び出されるメソッド */ synchronized void buy(){ while(empty()){ // 空だったらば, try{ wait(); } // コレ(buy)を呼んだスレを待たせる catch(Exception e){} } super.dec(); // 在庫を減らして, notifyAll(); // 他のスレッド(e.g., 補給したいヤツとか)にその旨を通知 } /** 在庫が1個追加される場合に呼び出されるメソッド */ synchronized void supply(){ while(full()){ // 満杯だったら, try{ wait(); } // コレ(supply)を呼んだスレを待たせる catch(Exception e){} } super.inc(); // 在庫を増やして, notifyAll(); // 他のスレッド(e.g., 買いたいヤツとか)にその旨通知 } }