[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00480] Re: Thread の一時停止と再開について





信乃です。
> 
> > だとすると、run()メソッド内のsynchronized(object)ブロックを
> > synchronized(this){
> >  while (flag)
> >   wait();
> > }
> > とし、mousePressed()メソッド内のsynchronized()ブロックを
> > synchronized(th){
> >   if(flag){
> >     msg="2";                          
> >     flag=!flag;                       
> >     th.notify();              
> >     showStatus(msg);
> >   }
> >   else{
> >     msg="1";                          
> >     showStatus(msg);
> >     flag=!flag;                       
> >   }
> > }
> > とすれば通常に処理できるということでしょうか?
> この場合、thisとthは同じオブジェクトですか?
同じではないかと思うのですが・・・・
私は、synchronized(this)にすると、カレントのスレッドが
対象になると思っているのですが、それがそもそも間違いなのでしょうか?

参考までにソースを入れておきます。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;

public class Stop_Resume extends Applet implements Runnable{
  Thread th=null;
  boolean flag=false;
  String msg="";
  public void start(){
    if(th==null){
      th=new Thread(this);
      th.start();
    }
    addMouseListener(new MouseAdapter(){
      public void mousePressed(MouseEvent e){
        synchronized(th){
          if(flag){
            msg="2";
            flag=!flag;
            th.notify();
            showStatus(msg);
          }else{
            msg="1";
            showStatus(msg);
            flag=!flag;
          }
        }
      }
    });
    repaint();
  }
  public void paint(Graphics g){
    Date d=new Date();
    g.setColor(Color.blue);
    g.setFont(new Font("TimesRoman",Font.BOLD,40));	
    g.drawString(d.toString(),0,60);
  }
  public void run(){
    while(true){
      try{
        th.sleep(1000);
        if(flag){
          synchronized(this){
            while (flag)
              wait();
          }
        }
      }
      catch(InterruptedException e){}
      repaint();
    }
  }
}


**************************************************
Shino Inuzuka
Mail:Titta2@xxxxxxxxxxxx
**************************************************

------------------------------------------------------------------------
目指せ!! 商品券20万,旅行券20万,デジカメ,PS2,Xbox…ホームページコンテスト
             http://isweb.infoseek.co.jp/hp_daiou/?svx=971122