记一个关于volatile作状态标志的很奇怪的问题
来源:互联网 发布:阿里巴巴比淘宝贵2016 编辑:程序博客网 时间:2024/05/18 07:53
看了不少书,讲了很多关于volatile的知识,但是对于volatile一直很疑惑,问题之一,就是关于volatile的经典例子,我第一个就跑不通,比如下面的经典代码,很多关于volatile的例子都是这么写的
class StopTester {boolean shutdownRequested;public void shutdown() {shutdownRequested = true;System.out.println("Thread GG");}public void doWork() {while (!shutdownRequested) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(System.currentTimeMillis());}}}我们来调用下
public class VolatileTest {public static void main(String[] args) throws Exception {final StopTester stopTester = new StopTester();new Thread(){@Overridepublic void run(){stopTester.doWork();}}.start();Thread.sleep(5000);stopTester.shutdown();System.out.println("main GGG");}}
我在idea中实际运行,无论给不给加不加volatile,程序都能够正常退出。此时的我.........
今天意外看到这篇2010年的文章
http://marlonyao.iteye.com/blog/636599
我也尝试去掉while(){}循环内语句
public void doWork() {while (!shutdownRequested) {//try {//Thread.sleep(1000);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(System.currentTimeMillis());}}
再次运行, 发现volatile有效果了,或者说之前不加volatile也有的效果现在没有了,看到了加不加volatile的区别。
那么问题来了,这是为什么呢???
阅读全文
0 0
- 记一个关于volatile作状态标志的很奇怪的问题
- 关于mkdir()的一个奇怪的问题。
- 关于ATI显卡的一个奇怪问题?
- 关于VS一个相当奇怪的问题!!!
- 关于function输入的一个奇怪问题
- 昨天关于isa的一个奇怪问题
- 关于block的一个奇怪问题
- 关于RelativeLayout的一个奇怪问题
- 关于 weak 变量的一个奇怪问题
- 一个奇怪的问题--关于文件输出
- 一个很奇怪的问题
- 一个很奇怪的问题
- 一个很奇怪的问题
- 一个很奇怪的问题 关于SelectByPoint 待解决
- 关于datagrid中一个很奇怪的删除问题
- QT中关于头文件一个很奇怪的问题
- 一个奇怪的问题
- 一个奇怪的问题
- 赫夫曼编码
- AndroidStudio3.0 下载使用新功能介绍
- 含有头结点双向循环链表
- Linux下如何查看版本信息
- Spring源码分析之BeanPostProcessor接口和BeanFactoryPostProcessor接口方法不执行原因分析
- 记一个关于volatile作状态标志的很奇怪的问题
- Collecting Bugs(POJ-2096)
- Together项目IOS平台开发04
- leetcode之回溯backtracing专题2
- 最短路径
- 数据结构和算法的选择
- MySQL的安装与配置
- Java Web 实现 QQ第三方登录
- python 使用cx_oracle