//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();
}这里的时候 程序就卡那了????
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() 唤醒所有线程
}
就是所有工人的线程我都放那了```
但是我这代码是在公司的类里面运行的啊`
那如何使一个线程组下面的所有线程都处于等待状态呢`
for (int i = 0; i < t.length; i++) {
synchronized (obj[i]) {
System.out.println("aaa");
t[i].wait();
System.out.println("BBB");
}
}
我这样的话 他会不停的输出AAA 但是 BBB 一次都不出现???为什么?
synchronized (obj[i]) {
System.out.println("aaa");
t[i].wait(); //所有线程都在这人wait住了,又没有人叫他
System.out.println("BBB");
}
}
就和一楼说的 一样,你让他wait了,还有有人叫他啊
非常典型的生产者-消费者例子,有非常多的例子,楼主可以找到很多相关资料。
如果楼主想要在某某条件下让线程等待,wait不应该写在这里,应该在线程的run方法里写。
线程不是你想让它停它就停,让它死它就死,你必须在run方法判断条件,然后根据条件进行相应处理。
比如run方法里写了死循环,然后就试图在外面结束这个线程,这是不对的。应该在run方法里这样写:
public void run{
while(needCycle){
//handle something
}
}
然后在线程外将变量needCycle置为false,线程就跳出循环,就结束了,即死亡了。
写wait也一样。
public void run{
synchronized(obj){
while(condition){
obj.wait();
}
}
}
调用wait而挂起的线程,必须由别的线程来执行notify或者notifyAll来唤醒它。nitify是唤醒在某个对象上挂起的一个线程(如果有多个挂起的,则随机选择一个),notifyAll是唤醒该对象上挂起的所有线程。