黑马程序员技术交流社区
标题:
关于线程的唤醒问题~
[打印本页]
作者:
黄鸿达
时间:
2013-2-3 13:20
标题:
关于线程的唤醒问题~
public class Test {
public static void main(String[] args) {
Rq r=new Rq();
Tq t=new Tq(r);
Thread t1=new Thread(t);
t1.start();
for(int x=0;x<10;x++){
System.out.print(x);
if(x==1){
try {
t1.join(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x==8){
r.notifyAll();
}
}
}
}
}
class Tq implements Runnable{
private Rq r;
Tq(Rq r){
this.r=r;
}
public void run(){
r.show();
}
}
class Rq{
synchronized void show(){
for(int x=0;x<100;x++){
System.out.println(Thread.currentThread()+"x="+x);
if(x==90){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
复制代码
我要改什么,才能让show方法内,剩余的x=91到100打印出来?为什么加了
r.notifyAll();也没唤醒呢????
作者:
黄鸿达
时间:
2013-2-3 14:02
本帖最后由 黄鸿达 于 2013-2-3 14:03 编辑
if(x==8){
r.notifyAll();
}
原来我这个语句放到if(X==1)里了。怪不得之前什么反应都没,你们测试的时候记得改下。
接着如果用T1.INTERRUPUT()就可以打印出后面的91到99,但是还有其他的方法吗?比如用NOTIFY之类的 我用NOTIFY报IllegalMonitorStateException估计是锁的问题,求解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2