Kev*_*vin 2 java multithreading primitive-types
我知道同时从不同的线程访问同一个对象,没有同步,通常是一件坏事.但是这个案子呢:
我有多个线程在运行(考虑两个,ThreadA和ThreadB).我也有这个静态类来保持Thread执行某些操作的次数.
public class Counter {
static private int counter=0;
static public void incCounter() {
counter++;
}
}
Run Code Online (Sandbox Code Playgroud)
如果ThreadA和ThreadB都调用Counter.incCounter()会发生什么?
Dav*_* L. 11
这不安全.
每个线程都会尝试读取counter,添加一个并回写结果.您无法保证这些读写操作的顺序,或者即使结果对每个线程都可见.
特别是,一个失败的情况是每个线程读取值0,将其递增为1,并回写值1.即使在两个线程尝试递增它之后,这也会使计数器的值为1.
请考虑使用AtomicInteger .incrementAndGet().