トップ 一覧 Farm 検索 ヘルプ 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();
       }
     }
   }
 }