首先,先传代码,有图片,也有文件,看不清的朋友可以直接下载文件回去跑一下,感受一下。
我解释一下吧,大概意思就是在一个线程里面不断的跑,如果a=0,就把a加到5,然后建立子线程,再在子线程里面把a减到0。预想的结果是这个循环会无限的执行打印语句,但是事实上,并没有。因为进不去 if 语句。也就是说,虽然子线程把a减到了0,主存中的a等于0,但是在main里面new出来的线程里面的a不等于0。
这是线程的工作内存问题,不知道工作内存的去百度吧,这里就不赘述了。我直接说解决方案吧:
②读如果不上锁也行,但是a变量要声明为volatile。
③使用atomic包,简单粗暴。