AtomicLong类并发访问:所设想的循环异常场景是否成立?
问题解答:该场景不可能存在
你担心的场景完全不可能发生,核心原因在于代码中的updated是方法局部变量:
- 每个线程调用
increment()方法时,都会在自己的线程栈中创建一个独立的updated变量,不同线程的updated属于各自的栈帧,彼此完全隔离,不存在互相修改的可能。 - 线程A的
updated变量是它私有的,线程B执行boolean updated = false;时,只是在自己的线程栈里创建了另一个全新的updated变量,和线程A的那个没有任何关联。 - 线程A在设置自己的
updated为true后,while循环检查的是自己栈内的这个变量,线程B根本无法触及到它,自然不可能把它改成false。
简单来说,局部变量是线程私有的,跨线程的修改在这里从根本上就不存在。
内容的提问来源于stack exchange,提问作者taher bouali
相关产品推荐
相关产品推荐

