Java 多线程通知和等待()概念?
下面是将素数复制到100并存储在数组中的代码。但问题是代码没有正常工作,因为第二个for循环没有等待i被更改。有人能帮我找出问题出在哪里吗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
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;abint 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 + " ");
}
}