【发布时间】:2011-05-05 04:13:34
【问题描述】:
我知道从不同的线程同时访问同一个对象而不进行同步通常是一件坏事。但是这个案例呢:
我有多个线程正在运行(考虑两个,ThreadA 和 ThreadB)。我也有这个静态类来计算线程做某事的次数。
public class Counter {
static private int counter=0;
static public void incCounter() {
counter++;
}
}
如果 ThreadA 和 ThreadB 都调用 Counter.incCounter() 会发生什么?
【问题讨论】:
-
没什么大不了的,但是计数器的总和不会准确。
-
@irreputable:取决于你认为什么是“灾难性的”。如果某些关键的东西依赖于计数器,它将失败。
-
为什么从不同的线程访问同一个对象是一件坏事?如果需要,那么它就是必要的。
-
@Steve Kuo - 澄清问题以说明非同步并发访问是什么不好。显然,来自多个线程的正确协调访问不是。
-
对于轻量级性能计数器,我不使用任何类型的线程安全,因为知道计数器可能会稍微超出,但成本最低。计数器仅用作指示。
标签: java multithreading primitive-types