java多线程的一个小坑
今日在测试volatile与synchronized特性的时候遇到的一个坑:
先上示例代码:
图1和图2代码本质上的区别是 新线程的i=i+1操作下多了println操作。
本质上的流程来说。讲status设置为false后应该打印i++多次后的结果。但是由于新线程status一开始是保存在工作内存中。
没有同步主内存中的status。因此while循环会一直执行。因此图1是正确的结果。但是图2加了输出操作后。发现while循环
中断了。相当于status加了volatile的效果。