而且wait只能由要等待的线程自己调用而不能这样
Thread a = new Thread(xxxx);
a.start(); //线程开始运行
a.wait(); //线程暂停
a,notify(); //线程继续运行
而只能将调用wait()方法的语句放到线程所要执行的代码里面,并且还要在同步块里:
run()
{
Thread.currentThread().wait();
}
和
run()
{
synchronized(this) {
Thread.currentThread().wait();
}
}
都会报 java.lang.IllegalMonitorStateException。必须得
run()
{
Thread t = Thread.currentThread();
synchronized(t) {
t.wait();
}
}
这样写才没事,我实在搞不懂这样的话wait(),notify(),notifyAll()这几个方法有什么用呢?特别是notifyAll(),wait()不是只能停止一个线程吗?因为它只能在线程的对象上调用啊例如t.wait()就相当于t暂停,而再调用t.notify()那么t继续运行,始终暂停和唤醒的只有线程t呀
|