Java 多线程通知和等待()概念?

Java 多线程通知和等待()概念?,java,Java,下面是将素数复制到100并存储在数组中的代码。但问题是代码没有正常工作,因为第二个for循环没有等待i被更改。有人能帮我找出问题出在哪里吗 synchronized (this) { boolean stop = false; boolean change = false; int primenumber[]= new int[20]; System.out.println("The prime numbers are

下面是将素数复制到100并存储在数组中的代码。但问题是代码没有正常工作,因为第二个for循环没有等待i被更改。有人能帮我找出问题出在哪里吗

       synchronized (this) {
        boolean stop = false;
        boolean change = false;
        int primenumber[]= new int[20];
        System.out.println("The prime numbers are : ");
        for (int i = 1; i <= 100; i++) {
            int count = 0;
            change = true;
            notify();
            for (int num = i; num >= 1; num--) {
                if (i % num == 0) {
                    count = count + 1;
                }
            }
            if (count == 2) {
                if (!stop) {
                    for (int ab = 0; ab <= 20; ab++) {
                        primenumber[ab] = i;
                        while (!change) {
                            try {
                                wait();
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                }
            }
        }
    }
已同步(此){
布尔停止=假;
布尔变化=假;
整数素数[]=新整数[20];
System.out.println(“素数是:”);
对于(int i=1;i=1;num--){
如果(i%num==0){
计数=计数+1;
}
}
如果(计数=2){
如果(!停止){
对于(int ab=0;ab
int num=0;
System.out.println(“请输入n.”);
扫描仪=新的扫描仪(System.in);
int n=scanner.nextInt();
scanner.close();
System.out.println(“\n输入数字至“+n+”);
对于(int i=1;i=1;num--){
如果(i%num==0){
计数器++;
}
}
//计数器=2意味着数字只能被1和数字本身整除,所以它是一个素数。
如果(计数器==2)
{
系统输出打印(i+“”);
}
}

您已经在循环的早期将
change
设置为
true
,因此
while(!change)
(即
while(!true)
)将永远不会执行其主体。如果您谈论的是多线程,主要问题是您的代码中没有多个线程。必须从不同的线程调用wait和notify方法。请不要只是将代码转储为答案,请说明您的代码做了什么以及它如何解决问题。
int num = 0;
    System.out.println("Please Enter n.");
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    scanner.close();

    System.out.println("\nPrime Numbers up to " + n + ".");

    for (int i = 1; i <= n; i++) {
        int counter = 0;
        for (num = i; num >= 1; num--) {
            if (i % num == 0) {
                counter++;
            }
        }

        // Counter = 2 means number is only divisible by 1 and the number itself. So it's a prime number.
        if (counter == 2) 
        {
            System.out.print(i + " ");
        }
    }