为了账号安全,请及时绑定邮箱和手机立即绑定

关于volatile的理解

关于volatile的理解

繁星淼淼 2019-04-13 08:45:24
classStopTesterimplementsRunnable{//privatevolatilebooleanstop=false;privatebooleanstop=false;publicvoidstopMe(){stop=true;}@Overridepublicvoidrun(){while(!stop){}System.out.println("Threadstopped.");}}publicclassTestVolatile{publicstaticvoidmain(String[]args)throwsException{StopTestertester=newStopTester();Threadthread=newThread(tester);thread.start();Thread.sleep(1000);System.out.println("Trystop...");tester.stopMe();Thread.sleep(1000);}}如果用了volatile,Threadstopped.就可以顺利输出,如果不用就无法输出,何解?tester.stopMe()这行代码是运行在主线程还是运行在thread线程呢?
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

如果不用valatile第一次访问stop的时候通过this引用把值读到栈上之后每次就直接从栈上读值了你改了stop他还是这样读所以循环卡在那里不会往下走
很明显在主线程
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 396 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信