java 中的同步输出不正确
improper output of synchronization in java
在代码中,线程输出没有正确同步。输出应该是递增顺序的数字。
这是代码
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
都(隐式地)自身同步 - 因此您有三个写入器和三个独立的锁(它们之间不会发生真正的同步)。
如果将 show
方法更改为静态,编写器将改为在 Writer
class 上同步 - 这样所有编写器将共享锁并与每个编写器同步其他.
在代码中,线程输出没有正确同步。输出应该是递增顺序的数字。
这是代码
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
都(隐式地)自身同步 - 因此您有三个写入器和三个独立的锁(它们之间不会发生真正的同步)。
如果将 show
方法更改为静态,编写器将改为在 Writer
class 上同步 - 这样所有编写器将共享锁并与每个编写器同步其他.