我的notifyAll()有什么问题?

时间:2015-10-04 17:47:27

标签: java multithreading

创建斐波纳契系列

    public void run(){
        int a=0,b=1,c;
        while(a<=10000){
            prim chk= new prim(a);
            chk.start();
            synchronized (chk) {
                try {
                    sleep(200);
                    chk.wait();
                } catch (InterruptedException e) {
                    return;
                }
            }
            c=a+b;
            a=b;
            b=c;
        }
     }

检查素数我创建了另一个线程(仅用于练习)

        public void run(){
            synchronized (this) {
                int fl=1;
                if(a==1||a==2)
                    fl=0;
                else
                    for(int i=2;i<=Math.sqrt(a);i++)
                        if(a%i==0)
                            fl=0;
                if(fl==0)
                    System.out.println(a);
            }
            notifyAll();
        }

输出中有许多IllegalMonitorState个例外。

1 个答案:

答案 0 :(得分:1)

应从Object#wait块调用{p> Object#notifyAllsynchronized