使用场景:
当我们在进行多线程操作共享数据的时候,如果我们不进行锁的处理,我们就会发现会有重复执行的现象,例如卖票操作,票如果是共享数据的话,那就会出现100张票卖了100多人的现象(其实就是线程安全问题)

解决方案:
方案一:一般我们都会进行加锁进行解决,将操作共享数据的地方用synchronized ()包裹起来
方案二:利用Lock锁进行加锁
方案三:volatile关键字也可以保证原子的可见性,来达到共享数据的安全性
方案四:就是我们今天介绍的方法,AtomicInteger也可以进行对于共享数据操作时保证原子性,从而解决线程的安全问题
基本使用:
public class MyAtomIntegerDemo1 {
//public AtomicInteger(int initialValue): 初始化一个指定值的原子型Integer
//int addAndGet(int data): 以原子方式将参数与对象中的值相加,并返回结果。
public static void main(String[] args) {
AtomicInteger ac = new AtomicInteger(10); // Integer i = 10;
System.out.println(ac.get());
int i = ac.addAndGet(20); // 10 + 20
System.out.println(i);
System.out.println(ac.get());
}
}

本文介绍了在多线程环境中,如何通过使用synchronized、Lock锁、volatile和AtomicInteger关键字解决数据共享时的线程安全问题,以MyAtomIntegerDemo1和MyAtomThread示例展示了AtomicInteger的正确用法。
最低0.47元/天 解锁文章
3696

被折叠的 条评论
为什么被折叠?



