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线程会停止