multiThreading notify和Wait()概念?

时间:2019-02-09 09:41:22

标签: java

这里是将素数保留到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) {
                            }
                        }
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:-1)

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 + " ");
        }
    }