楼主小白,在学多线程的时候遇到一个问题,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");
}}
下面的两个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");
}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货