volatile关键字:作用是使变量在多个线程间可见(final也是的)
未使用volatile关键字的代码:
public class RunThread extends Thread{
/**
* volatile关键字,当变量
* --isRunning用来控制run()中循环的结束,这里没有加volatile的话,rt线程中的isRunning不会改变
*
*
* jdk5后对每一个线程加了一个内存空间,装主内存中的引用变量,所以isRuning在rt线程中依然是true,即使主线程将isRunning改为true。
*/
/**volatile*/
private volatile boolean isRunning = true;
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}
public void run(){
System.out.println("进入run方法..");
int i = 0;
while(isRunning == true){
//..
}
System.out.println("线程停止");
}
public static void main(String[] args) throws InterruptedException {
RunThread rt = new RunThread();
rt.start();
Thread.sleep(1000);
rt.setRunning(false);
System.out.println("isRunning的值已经被设置了false");
}
}
打印结果:一直死循环
使用volatile关键字后打印结果:rt线程会停止
本文通过一个具体的线程控制示例,详细介绍了Java中volatile关键字的作用及其如何确保变量在线程间的可见性。文中对比了使用与未使用volatile时程序的行为差异,并解释了其背后的内存模型原理。
462

被折叠的 条评论
为什么被折叠?



