@无量_4e85 如果刚才回复的,好像还是解决不了B线程获取null的问题。虽然volatil能保证对主内存变量的使用是可见的,但是无法保证B在执行的时候,A线程就一定会完成主内存的赋值。就是说volatil可以控制多线程同时对主内存变量的读写顺序,却不能解决AB线程谁先执行完的问题。
深入理解Java内存模型java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现j...
@无量_4e85 如果刚才回复的,好像还是解决不了B线程获取null的问题。虽然volatil能保证对主内存变量的使用是可见的,但是无法保证B在执行的时候,A线程就一定会完成主内存的赋值。就是说volatil可以控制多线程同时对主内存变量的读写顺序,却不能解决AB线程谁先执行完的问题。
深入理解Java内存模型java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现j...
@无量_4e85 我看的是这样的。首先有两个线程(一个线程中是没问题的,如文章中说的“有序性”章节),A线程在做前三行,还没有写回主内存的initialized值,这个时候B线程已经执行到while了,B在使用副本的initialized值就错了。其实这里作者有个歧义,不是说增加了volatil就是B等前三行都处理完,应该是B等A线程对主内存中initialized变量的assign、store、write三个动作处理完,这个时候B才能read、load、use,并不是对上面的三行代码处理完。
深入理解Java内存模型java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现j...