【发布时间】:2018-11-02 00:41:36
【问题描述】:
下面的代码显示了线程中没有竞争条件是如何工作的,但我没有得到同步和不同步之间的区别。我以为静态变量计数器无论如何都会被添加到 20000,但事实证明,没有同步计数器会小于 20000。你能解释一下在这种情况下线程是如何工作的吗?另外,在Java中,线程实际上不是“并发”运行,而是轮流运行一段时间吗?
public class NoRaceCondition implements Runnable {
private static int counter = 0;
private static Object gateKeeper = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(new NoRaceCondition());
Thread t2 = new Thread(new NoRaceCondition());
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) { e.printStackTrace(); }
System.out.printf("counter = %d\n", counter);
}
public void run() {
synchronized (gateKeeper) {
for (int i = 0; i < 10000; i++) {
{
counter++;
}
}
}
}
}
【问题讨论】:
标签: java multithreading concurrency