public class Counter { private volatile int count = 0; //若要线程安全执行执行count++,需要加锁 public synchronized void increment() { count++; } public int getCount() { return count; } }
在多线程下调用,volatile 是必须的,也是必须加锁的。 1,如果没有 volatile,那么如果线程 A 频繁访问 count,编译器很可能优化其为寄存器,这时线程 B 修改了 count,A 当时是无反应的,此时 A 再修改,B 的修改就被覆盖了。 2,加锁也是必须的,因为两个 CPU 同时对一个地址写,也是可能覆盖情况。 针对这个情况 CPU ……
62,635
社区成员
307,269
社区内容
加载中
试试用AI创作助手写篇文章吧