多线程有共同变量 initFlag,未使用volatile效果如下:
现象:线程1执行到while时,当前 initFlag = false,所以线程1进入死循环;线程2执行,调用 prepareData(),该方法中有将 initFlag重置为 true,线程2执行完,但从圈中部分可以看出程序仍在运行,线程1中的并没有跳出while的死循环(若跳出死循环则会打印出 success),可以看出线程1 使用的变量 initFlag 仍然是 = false的;结论是线程2变更initFlag的值,并没有共享到线程1中使用;
多线程有共同变量 initFlag,使用volatile效果如下:
现象:volatile使多线程共同使用的共享变量有可见性(一致性,共享变量变更后线程都会使用变更后的值);<