!バグ退治 ずいぶん前に書いたコードのバグを指摘されたので修正. 思い出すのにえらく時間がかかってしまったけど, バグ自体はクリティカルな割に,簡単な修正で解決.やれやれ. !掃除 おろそかになっていた部屋の片付けを.少しすっきり. !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(); } } } }