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他还是这样读所以循环卡在那里不会往下走很明显在主线程
添加回答
举报
0/150
提交
取消