gpt4 book ai didi

java - 使用 2 个线程打印奇数和偶数?

转载 作者:行者123 更新时间:2023-12-01 14:10:02 28 4
gpt4 key购买 nike

我已经尝试过这段代码。但是打印 0 后,它不会打印任何内容。我认为它是由于某些锁定而阻塞的。

public class EvenOdd implements Runnable {
private Object o = new Object();
private volatile int i = 0;

public void run() {
try {
System.out.println();
if ( Thread.currentThread().getName().equals( "Even")) {
printEven();
} else {
printOdd();
}
} catch ( Exception ee) {
ee.printStackTrace();
}
}

private void printEven() throws InterruptedException {
while ( true) {
synchronized ( o) {
while ( this.i % 2 == 0) {
o.wait();
}
System.out.println( Thread.currentThread().getName() + i);
i++;
o.notify();
}
}
}

private void printOdd() throws InterruptedException {
while ( true) {
synchronized ( o) {
while ( this.i % 2 != 0) {
o.wait();
}
System.out.println( Thread.currentThread().getName() + i);
i++;
o.notify();
}
}
}
}

我的测试类:

EvenOdd x = new EvenOdd();
new Thread(x,"Even").start();
new Thread(x,"Odd").start();

我哪里错了?谢谢。

P.S:我知道此类问题已被问过很多次,但我想自己尝试一下。

最佳答案

我的猜测是你是;

  • 使用一个 Runnable,但两者都认为它们是偶数,即它们都看到第一个值 0
  • printEven 必须等待奇数,而 printOdd 必须等待偶数

编辑:运行代码后,OP修复了代码,它打印

0
1
正如预期的那样。有时可能会随机打印 0 和 0,因为奇/偶的第一次检查不同步。

关于java - 使用 2 个线程打印奇数和偶数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595021/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com