不多说什么,先上代码:
输出,都是10000,表明AtomicInteger是线程安全
换上Integer并且加上线程同步措施,结果输入都是1000
Integer源码就不贴了,final修饰
AtomicInteger源码:
static代码块是获取初始化之前字段内存分配之后的偏移量
getAndIncrement方法:
从源码可以看到,使用了unsafe.getAndAddInt,其中的valueOffset就是value字段在内存中的偏移量,unsafe方法就是一个内存操作方法,所以,Integer没能达到预期效果的原因在这,想办法解决它就行了。
达到内存操作的方法,除了unsafe,还有一种就是反射获得对象并使用字段设值的方式依然可以做到相同效果,最后代码:
测试,10000,嗯,非常的好!