首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

关于线程的暂停和恢复的有关问题

2012-08-24 
关于线程的暂停和恢复的问题?Java codepublic class text extends Thread{public void run(){while(true){

关于线程的暂停和恢复的问题?

Java code
public class text extends Thread{        public void run(){        while(true){        System.out.println("sss");        }    }    public static void main(String xa[]){        text tt=new text();        Thread t=new Thread(tt);        t.start();        try {            t.wait();        } catch (InterruptedException e) {            e.printStackTrace();        }    }

想知道为什么有t.wait(),而线程不能停下来?而且还会报错?
wait是属于object的方法,虽然thread也是属于object下的,但t.wait()是不是不能这么用?必须是object的实例调用wait?
这个暂停和恢复该怎样做?

[解决办法]
我想这暂停和恢复应该都是在那个text类中的run()方法中来调用才能使当前线程暂时停止和恢复吧... 你试试~~
[解决办法]
你对wait()的理解错误了
这个方法不是让一个线程wait,而是让一个监视器锁起来

这个监视器就是一个普通的对象
而线程通过synchronized(obj)把这个对象设置为监视器

synchronized (obj) {
需要同步的语句;
}

像你的需求:

Java code
public class TestThread{       Object lock;       public TestThread(Object lock){this.lock=lock;}       public void run()       {          while(run)         {             synchronized (lock) // an ad-hoc lock             {                 System.out.println("sss");             }          }       }}public class TestMain{public static void main(String xa[]){        Object lock=new Object();        TestThread t=new TestThread();        t.start();  //开始打印sss        Tread.currentThread().sleep(10000);        lock.wait();//应该看到打印sss持续10秒后停止;        Tread.currentThread().sleep(10000); //再等10秒        lock.notifyAll(); //打印又继续了....        }}
[解决办法]
wait()方法会使线程永久无线的等待下去,需要使用notify()或者notifyall()方法唤醒,而且wait()与notify(),notifyall()方法只能在同步块或同步方法中使用

[解决办法]
wait 需要拿到同步锁,也就是状态监控,你直接调用当然出
 IlleagleMonitorStateException 了。


[解决办法]
你对wait()的理解错误了 
这个方法不是让一个线程wait,而是让一个监视器锁起来 

这个监视器就是一个普通的对象 
而线程通过synchronized(obj)把这个对象设置为监视器 

synchronized (obj) { 
需要同步的语句; 

wait()方法会使线程永久无线的等待下去,需要使用notify()或者notifyall()方法唤醒,而且wait()与notify(),notifyall()方法只能在同步块或同步方法中使用 

热点排行