[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