- 并发整体框架图
- 实现一个计数器(体现原子性)
- 方式1:使用count++
- 方式2:加synchronized 和 volatile
- 方式3:AtomicInteger
public class Counter{
private int count;
public void increase(){
count++;
}
问题
该代码可能在多线程条件下出现问题,因为count++是非原子的。
count++ 实际上等于三个操作:读数据,加1,写回数据。
解决
为了防止多线程下访问increase方法会报错,所以给increase方法加锁。
count变量修改了其他线程可能看不到,所以就加个volatile关键字吧。
public class LockCounter{
private volatile count;
public synchronized void increase(){
count++;
}
}
问题
加锁会影响效率,可以考虑使用原子操作类的形式。
public class AtomicCounter{
private AtomicInteger count = new AtomicInteger(0);
public void increase(){
count.incrementAndGet();
}
}



