java - 我的notifyAll() 有什么问题吗?

标签 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输出中的异常。

最佳答案

Object#waitObject#notifyAll 应从 synchronized block 调用。

关于java - 我的notifyAll() 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936450/

相关文章:

c++ - 为什么线程同步不起作用?

java - 在 Java 中,如何确定守护线程始终在运行?

java - 更改 URL 中列表/数组的格式 [Retrofit 2]

java - 加载数据时达到饱和点;我如何控制 Java GC 生成?

java - 从同步方法调用同步方法的同步成本是多少?

java - 使用 opengl-es 在 android 中使用大图像(20mb 时为 8000x5000)的最佳方法

c++ - 使用 OpenMP 在 C、C++ 中并行化嵌套 for 循环的几种方法之间的差异

Java 线程 notify() 与 notifyAll()

c - 如何优雅地让一个阻塞的pthread从主线程退出?

java - 内容更改时 Swing 组件重叠