当前位置: 代码迷 >> Eclipse >> 关于线程的暂停和恢复的有关问题
  详细解决方案

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

热度:10   发布时间:2016-04-23 12:46:02.0
关于线程的暂停和恢复的问题?
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()方法只能在同步块或同步方法中使用 
  相关解决方案