java中 基本类型简单的赋值操作都属于原子操作 比如 int x;x=10;
又比如y=x; x++;等操作其实是两步操作,单步都是原子操作,合起来就不是了,再多线程高并发下就会出现问题
valatile关键字保证了可见性,被修改的值会被立即更新到内存,但是依然不能保证原子性.
保证原子性方法:
1.将x++封装到方法,用synchronized 修饰该方法
2.还是将操作提到方法中 用lock
3. 变量用AtomicXXX修饰.
java中 基本类型简单的赋值操作都属于原子操作 比如 int x;x=10;
又比如y=x; x++;等操作其实是两步操作,单步都是原子操作,合起来就不是了,再多线程高并发下就会出现问题
valatile关键字保证了可见性,被修改的值会被立即更新到内存,但是依然不能保证原子性.
保证原子性方法:
1.将x++封装到方法,用synchronized 修饰该方法
2.还是将操作提到方法中 用lock
3. 变量用AtomicXXX修饰.