Run Code Online (Sandbox Code Playgroud)public class ReOrdering implements Runnable { int one, two, three, four, five, six; volatile int volaTile; @Override public void run() { one = 1; two = 2; three = 3; volaTile = 92; int x = four; int y = five; int z = six; } }
的任务
one
,two
并且three
可以重新排序,只要他们所有发生之前volatile
写.同样,x
,y
和z
作为陈述可能被重新排序volatile
写个个之前发生.该volatile
操作通常称为内存屏障.保证之前发生的事情确保volatile
变量的读写指令 不能在内存屏障上重新排序.在保证具有另一种效果之前发生:当线程写入
volatile
变量时,在写入volatile
变量之前由线程更改的所有其他变量(包括非易失性)也会刷新到主存储器.当线程读取volatile
变量时,它还会读取所有其他变量(包括非易失性),这些 …