//group 是一个线程组,我想要这个线程组下面的所有线程等待``然后唤醒他们该怎么做?
Thread[] t = new Thread[group.activeCount()];
group.enumerate(t);
for (int i = 0; i < t.length; i++) {
synchronized (Worker.obj) {
t[i].wait();
}
}
System.out.println("公司该休息了....请明天再来!!!");
Thread.currentThread().sleep(3000);
System.out.println("公司休息完了...快来找工作!!!");
for (int i = 0; i < t.length; i++) {
synchronized (Worker.obj) {
t[i]..notify();
}
}为什么 代码运行到 synchronized (Worker.obj) {
t[i].wait();
}这里的时候  程序就卡那了????

解决方案 »

  1.   


    for (int i = 0; i < t.length; i++) {
                            synchronized (Worker.obj) {
                                t[i].wait();
                            }
                        }所有的线程都是等待状态。它还怎么往下运行呢。
    最起码。
    for (int i = 0; i < t.length; i++) {
                            synchronized (Worker.obj) {
                                t[i].wait();
                            }
                            notify();//唤醒其它的线程。或者notifyAll() 唤醒所有线程
                        }
      

  2.   

    group 只是一个 类别的线程组啊`不是所有的线程啊
    就是所有工人的线程我都放那了```
    但是我这代码是在公司的类里面运行的啊`
     
    那如何使一个线程组下面的所有线程都处于等待状态呢`
      

  3.   


    for (int i = 0; i < t.length; i++) {
    synchronized (obj[i]) {
    System.out.println("aaa");
    t[i].wait();
    System.out.println("BBB");
    }
    }
    我这样的话  他会不停的输出AAA  但是 BBB 一次都不出现???为什么?
      

  4.   

    for (int i = 0; i < t.length; i++) {                        
                            synchronized (obj[i]) {
                                System.out.println("aaa");
                                t[i].wait();  //所有线程都在这人wait住了,又没有人叫他
                                System.out.println("BBB");
                            }
      }
    就和一楼说的 一样,你让他wait了,还有有人叫他啊
      

  5.   

    需要其他线程去notify它。
    非常典型的生产者-消费者例子,有非常多的例子,楼主可以找到很多相关资料。
      

  6.   

    难道应该函数名后面加synchronized ?
      

  7.   

    第一次循环的时候,先打印,再执行wait,一执行完,执行当前代码的线程就挂起了,同时把obj[0]对象的锁释放掉了。
    如果楼主想要在某某条件下让线程等待,wait不应该写在这里,应该在线程的run方法里写。
    线程不是你想让它停它就停,让它死它就死,你必须在run方法判断条件,然后根据条件进行相应处理。
    比如run方法里写了死循环,然后就试图在外面结束这个线程,这是不对的。应该在run方法里这样写:
    public void run{
          while(needCycle){
               //handle something
          }
    }
    然后在线程外将变量needCycle置为false,线程就跳出循环,就结束了,即死亡了。
    写wait也一样。
    public void run{
          synchronized(obj){
             while(condition){
                obj.wait();
             }
          }
    }
      

  8.   

    关键只是一句话:
    调用wait而挂起的线程,必须由别的线程来执行notify或者notifyAll来唤醒它。nitify是唤醒在某个对象上挂起的一个线程(如果有多个挂起的,则随机选择一个),notifyAll是唤醒该对象上挂起的所有线程。
      

  9.   

    线程要想调用一个对象的wait()方法就要先获得该对象的监视锁,而一旦调用wait()后又立即释放该锁 但是要通过notify便可唤醒。
      

  10.   

    需要其他线程去唤醒他,你在当前已经wait了,当然不会下去了。得在另外一个线程唤醒。