java – 什么时候引用需要是原子的?
在
Java中以原子方式分配引用是什么意思?
>我明白了一个长双重的意思,就是:一个线程可以看到部分构造的数字, 那么如果Java中的引用分配不是原子的话,那可能是错的呢? 解决方法
这意味着你不会得到损坏的参考.假设你有以下类:
class MyClass { Object obj = null; } 在内存中,obj是一个空指针,通常它是一个整数,如0x00000000.那么假设在一个线程中你有一个任务: this.obj = new Object(); 假设在内存中分配了新的Object(),并且具有像0x12345678这样的指针.引用原子性确保当您从另一个线程检查obj时,您将具有空指针(0x00000000)或指向新对象的指针(0x12345678).但是,在任何情况下,您都可以获得部分分配的引用(如0x12340000),指向无处. 这可能看起来很明显,但是根据CPU架构和内存对齐方式,这样的问题可能会出现在像C这样的低级语言中.例如,如果您的指针未对齐并跨越缓存行,则可能不会同步更新.为了避免这种情况,Java虚拟机始终对齐指针,所以它们不会越过缓存行. 因此,Java引用非原子,当引用来自另一个线程的引用时,会得到不是在赋值之前或之后引用的对象,而是随机存储器位置(可能导致分段错误,已损坏)堆或任何其他灾难). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |