猿问

关于volatile的理解

classStopTesterimplementsRunnable{
//privatevolatilebooleanstop=false;
privatebooleanstop=false;
publicvoidstopMe(){
stop=true;
}
@Override
publicvoidrun(){
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线程呢?
繁星淼淼
浏览 397回答 2
2回答

森栏

如果不用valatile第一次访问stop的时候通过this引用把值读到栈上之后每次就直接从栈上读值了你改了stop他还是这样读所以循环卡在那里不会往下走很明显在主线程
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答