トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2011-11-9

バグ退治

ずいぶん前に書いたコードのバグを指摘されたので修正.
思い出すのにえらく時間がかかってしまったけど,
バグ自体はクリティカルな割に,簡単な修正で解決.やれやれ.

掃除

おろそかになっていた部屋の片付けを.少しすっきり.

JavaRock開発日誌

wait-notifyができるようにと,下のようなコードを考えてみてるけど....

public class Consumer extends Thread{
  private int counter;
  private synchronized void exec(){
    try{
      wait();
    }catch(InterruptedException e){
      e.printStackTrace();
    }
    System.out.println("consume: " + counter);
    counter++;
  }
  public synchronized void wakeup(){
    notify();
  }
  public void run(){
    while(true){
      exec();
    }
  }
}

むー,今の実装では,いろいろと厳しいぞ.

JavaRock開発日誌(2)

ごにょごにょやって,アドホックな解決策を思いついた♪
...と思ったけど,synchronizedの扱いが下手だったので,上のコードでは上手くいかない.
とりあえず下のように,notifyは外から叩くことにする.

コンシューマ側
public class Consumer extends Thread{
  private int counter;
  private synchronized void exec(){
    try{
      wait();
    }catch(InterruptedException e){
      e.printStackTrace();
    }
    counter++;
  }
  public void run(){
    while(true){
      exec();
    }
  }
}

プロデューサ側
public class Producer extends Thread{
  private final Consumer consumer = new Consumer();
  int counter;
  public void run(){
    consumer.start();
    while(true){
      counter++;
      synchronized(consumer){
	consumer.notify();
      }
    }
  }
}