首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

对AtomicInteger的1点疑惑,请大师帮忙解答一下

2014-01-12 
对AtomicInteger的一点疑惑,请大师帮忙解答一下AtomicInteger的“boolean compareAndSet(int expect, int u

对AtomicInteger的一点疑惑,请大师帮忙解答一下
AtomicInteger的“boolean compareAndSet(int expect, int update)”方法,API上解释的比较清楚了,是说“如果当前值 == 预期值,则以原子方式将该设置为给定的更新值”,并且,它内部是调用的一个native方法。
我的疑惑如下:
1、为而要用native实现这个功能,直接“if(value==expect) value=update;”不可以吗?
2、是否是考虑到“if(value==expect) value=update;”这个写法不是多线程安全的?我试过,貌似是多线程安全的;
3、请问有没有什么示例代码能证明用“if(value==expect) value=update;”不可取代native方式,或是说用什么代码能体现出JDK里compareAndSet和自己写的“if(value==expect) value=update;”的区别?
[解决办法]

引用:
是否是考虑到“if(value==expect) value=update;”这个写法不是多线程安全的?我试过,貌似是多线程安全的;


不错,这个写法不是多线程安全的。

你试不出它不安全,不表示它是安全的。

1 - 线程 a 执行这段代码,先测试 value == expect,得结果 true
2 - 此时线程 b 更改了 value 的值
3 - 线程 a 执行 value = update,但其实此时 value == expect 已经不成立了

热点排行