楼主小白,在学多线程的时候遇到一个问题,JDK 1.8  
下面的两个demo中,isRunning 都没有加 volatile关键字,demo1执行后,线程不会停止,但demo2 会停止。。为什么啊~~~
Demo2 只是在while循环中打印了一句话啊
Demo1:
public class RunThread extends Thread{ private  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(isRunning);
System.out.println("线程停止");
}

public static void main(String[] args) throws InterruptedException {
RunThread rt = new RunThread();
rt.start();
Thread.sleep(1000);
System.out.println("后续代码...执行");
rt.setRunning(false);
System.out.println("isRunning的值已经被设置了false");
}

}Demo2:public class RunThread extends Thread{ private  boolean isRunning = true;
private void setRunning(boolean isRunning){
this.isRunning = isRunning;
}

public void run(){
System.out.println("进入run方法..");
int i = 0;
while(isRunning == true){
//..
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("running...");
}
System.out.println(isRunning);
System.out.println("线程停止");
}

public static void main(String[] args) throws InterruptedException {
RunThread rt = new RunThread();
rt.start();
Thread.sleep(1000);
System.out.println("后续代码...执行");
rt.setRunning(false);
System.out.println("isRunning的值已经被设置了false");
}}