经典指数          
原因
1025
浏览数
0
收藏数
 

int I = 0; I = i++; I = i++; 是线程安全的吗?如果不是,那它在JVM中是如何实现的?JDK中有哪个类可以实现这个目标又是线程安全的?这个类线程安全的原理是什么?

     举报   纠错  
 
切换
1 个答案
(1) 不是线程安全的。 (2) 实现方式:当我们进行i++工作的时候,分成了几步。1. 通过read指令读取主内存中值,传输到工作内存中。2. 通过load指令把通过read指令传输到工作内存中的值放入到工作内存的变量副本中。3.通过use指令把工作内存中变量副本的值传递给执行引擎。4. 执行 i+1 操作。5. 通过assign指令把 运算后的值传给 赋给工作内存中的变量。6. 通过store指令把工作内存中的变量的值传输给主内存中。7. 通过write指令把通过store传输过来的值写入到主内存的变量中。 (3)AtomicInteger类可以实现这个目标并且是线程安全的。 (4)安全原理:利用了硬件的支持。(不太记得了。)其实主要能把上面的实现流程变成一个原子操作即可。比如说,执行完 i+1 后,马上store(这也是volatile原理)。或者通过synchronized,或者加锁lock来实现。
 
切换
撰写答案
扫描后移动端查看本题