读书人

notify无法唤醒wait的有关问题

发布时间: 2012-02-16 21:30:36 作者: rapoo

notify无法唤醒wait的问题
为了提问方便,写了一段程序,不明白为什么notify不能唤醒wait。预期输出应该是不停的输出1,为什么只输出一个1,然后就不动了?

Java code
class Test implements Runnable {    public void run() {        try {            while (true) {                System.out.print(1);                synchronized (this) {                    wait();                    notify();                }            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }}public class bk {    public static void main(String[] args) {        Test t = new Test();        new Thread(t).start();    }}


[解决办法]
wait();//这里加上时间就好了。比如wait(1000)
[解决办法]
你应该用另外一条线程notify它
wait时都已经停止了哦,怎么会执行下面的代码呢?
[解决办法]
这个当然不会唤醒了,就如同你把自己催眠了怎么可能再由自己来叫醒自己呢??
[解决办法]
恩恩,需要另外一个线程去监听这个线程的状态,然后notify,4楼正解
[解决办法]
一个线程wait没有参数,自己进入等待队列.没有别人叫他.他都没机会运行呀.notify()执行不到呀.
要写另外一个线程,调用notifyAll()/notify(),才能把他救出来呀.
[解决办法]
当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。

对于某一个参数的版本,实现中断和虚假唤醒是可能的,而且此方法应始终在循环中使用:


你的线程住于等待状态


你却又想让他去唤醒自己。。。好像 没有 自己已经熟睡的 还可以随时叫醒自己 。。。

API 参考~。~

[解决办法]
顶!!!!!!!!!!
[解决办法]
这是典型的死锁问题!!!
[解决办法]
自己睡着了wait开始等待,你自己可以叫醒你自己吗? 典型的....
[解决办法]
顶16搂!
[解决办法]
探讨
你应该用另外一条线程notify它
wait时都已经停止了哦,怎么会执行下面的代码呢?

[解决办法]
探讨
这是典型的死锁问题!!!

读书人网 >J2SE开发

热点推荐