gpt4 book ai didi

java - java中同步输出不正确

转载 作者:行者123 更新时间:2023-12-01 09:03:43 25 4
gpt4 key购买 nike

代码中,线程输出未正确同步。输出应该是按升序排列的数字。

这是代码

public class Prog {

public static void main(String[] args) {
Thread a = new Thread(new Writer(), "A");
Thread b = new Thread(new Writer(), "B");
Thread c = new Thread(new Writer(), "C");
a.start();
b.start();
c.start();
}

static class Writer implements Runnable {

private static int count;

@Override
public void run() {
while (count < 5) {
show();
}
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
}
}

private synchronized void show() {
System.out.println(Thread.currentThread().getName() + ":\t" + ++count);
}
}
}
<小时/>

此代码的一个输出是:

B:  2
B: 4
C: 3
A: 2
B: 5
<小时/>

而预期输出是:

B:  1
B: 2
C: 3
A: 4
B: 5
<小时/>

我错过了什么?请帮忙。

最佳答案

每个 Writer 都会(隐式)自身同步 - 因此您拥有三个 writer 和三个独立的锁(它们之间不会发生真正的同步)。

如果将 show 方法更改为静态,则编写器将在 Writer 类上同步 - 这样所有编写器将共享锁并与每个编写器同步其他。

关于java - java中同步输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41459103/

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