不用AtomicInteger,Integer怎样做到线程安全

不用AtomicInteger,Integer怎么做到线程安全

不多说什么,先上代码:
在这里插入图片描述
输出,都是10000,表明AtomicInteger是线程安全
在这里插入图片描述
换上Integer并且加上线程同步措施,结果输入都是1000

AtomicInteger源码与Integer源码比较

Integer源码就不贴了,final修饰
AtomicInteger源码:
在这里插入图片描述
static代码块是获取初始化之前字段内存分配之后的偏移量
getAndIncrement方法:
在这里插入图片描述
从源码可以看到,使用了unsafe.getAndAddInt,其中的valueOffset就是value字段在内存中的偏移量,unsafe方法就是一个内存操作方法,所以,Integer没能达到预期效果的原因在这,想办法解决它就行了。

解决方案

达到内存操作的方法,除了unsafe,还有一种就是反射获得对象并使用字段设值的方式依然可以做到相同效果,最后代码:
在这里插入图片描述 测试,10000,嗯,非常的好!