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(); } } } }