关于线程的暂停和恢复的问题?
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(); } }
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()方法只能在同步块或同步方法中使用