一、自增会带来线程安全问题吗?为什么?
会!
1.i++在字节码层面分为三步:保存当前值,执行添加操作,更新新值
2.多线程操作时,可能会同时获取到旧值(假设为1),添加操作后为2,第一个线程刷新新值为3,第二个刷新还是3。
二、volatile可以保证线程安全吗?
不可以!
volatile只能保证可见性,以及顺序性
但是不能保证多个线程同时操作
三、如何保证线程安全?
synchronized,将方法原子化
automicInteger.getAndSwap
会!
1.i++在字节码层面分为三步:保存当前值,执行添加操作,更新新值
2.多线程操作时,可能会同时获取到旧值(假设为1),添加操作后为2,第一个线程刷新新值为3,第二个刷新还是3。
不可以!
volatile只能保证可见性,以及顺序性
但是不能保证多个线程同时操作
synchronized,将方法原子化
automicInteger.getAndSwap