public class RunThread extends Thread{
private boolean isRunning = true;
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}
public void run(){
System.out.println("进入run方法..");
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");
}
}
public class RunThread {
private boolean isRunning = true;
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}
public void run1(){
while(isRunning == true){
}
}
public static void main(String[] args) throws InterruptedException {
final RunThread rt = new RunThread();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
rt.run1();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
rt.setRunning(false);
}
});
t.start();
t2.start();
}
}
以上两个程序,对于isRunning变量的线程间可见性,是不一样的,上面的程序不可见,需要加volatile关键字,下面的程序却不需要volatile关键字即可见,这是为什么...