菜鸟题---用一个线程的两个按钮控制另一个线程的wait()和notify() ,程序如下,实现不了

languagec 2004-12-08 04:47:14
用一个线程的两个按钮控制另一个线程的wait()和notify() ,程序如下,实现不了
是哪里出错了?
import java.awt.*;
import java.awt.event.*;
class process extends Frame implements ActionListener
{
TextField text;
Button b1,b2;
mythread thread;
process(String t)
{
super(t);
setLayout(new FlowLayout());
b1=new Button("stop");
b2=new Button("resume");
text=new TextField(20);
thread=new mythread(text);
b1.addActionListener(this);
b2.addActionListener(this);
add(text);
add(b1);
add(b2);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
});
thread.start();
pack();
show();
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource()==b1)
{
try{
thread.w();
}
catch(Exception e)
{
}
}
if(event.getSource()==b2)
{
thread.n();
}
}
public static void main(String args[])
{
process m=new process("myprocess");
}
}
class mythread extends Thread
{
TextField text;
mythread(TextField t)
{
text=t;
}
synchronized public void w()
{
try{
wait();
}
catch(Exception e)
{
}
}
synchronized public void n()
{
notify();
}
public void run()
{
for(int i=0;i<=1000;i++)
{
text.setText("i="+i);
try{
sleep(500);
}
catch(Exception e)
{
}
}
}
}
...全文
112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
superman421 2004-12-09
  • 打赏
  • 举报
回复
class mythread extends Thread
{
TextField text;
volatile boolean wait;
mythread(TextField t)
{
text=t;
wait=false;
}
synchronized public void w()
{
synchronized(this){
wait=true;
}
}
synchronized public void n()
{
synchronized(this){
wait=false;
notify();
}
}
public void run()
{
for(int i=0;i<=1000;i++)
{
while(wait){
try{
wait();
}
catch(Exception e){};
}
text.setText("i="+i);
try{
sleep(500);
}
catch(Exception e)
{
}
}
}
}
//this 是可以改成其它的的
treeroot 2004-12-09
  • 打赏
  • 举报
回复
楼主可能误解了wait和notify.

首先这两个方法是Object的方法,但是往往又和多线程联系在一起,确实又和
Thread这个类没有一定的关系,比如Thread的join方法就是调用了wait方法.
但是这两个方法和Thread没有直接的关系,你不希望调用一个Thread实例的
wait方法要让这个线程等待,其实是当前线程在等待这个Thread实例的同步锁(这里
和其他的Object一样).
ouyanggz 2004-12-08
  • 打赏
  • 举报
回复
设置一个boolean变量,不停检查这个值的值.
zyg158 2004-12-08
  • 打赏
  • 举报
回复
顶!
guihu 2004-12-08
  • 打赏
  • 举报
回复
长,没看
有个办法可以实现
写2个静态的boolean成员,对应要控制的2个线程,由第3个线程控制这两个成员的真假。
被控制的2个线程,不停的去检查这两个值,为真的时候执行线程体,假的时候用yield()放弃执行就是了
treeroot 2004-12-08
  • 打赏
  • 举报
回复
wait是使当前线程等待对象锁,是Object的方法,怎么可能使线程停止?
而是使当前线程等待!

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧