使用全局变量创建了以下类。 但是为什么我的主题没有结束或者已经死了。
public class MTTest {
private static boolean isRequestToStop = false;
public static void main(String [] args) throws Exception{
Thread T = new Thread (new Runnable(){
public void run(){
while(!getRequestToStop()) {
//System.out.println(" Value is " +getRequestToStop() );
//System.out.println("Thread");
}
}
});
T.start();
Thread.sleep(1000);
setRequestToStop();
//isRequestToStop = true;
}
public static void setRequestToStop(){
System.out.println("--- setRequestToStop()--- Called");
isRequestToStop = true;
}
public static boolean getRequestToStop(){
return isRequestToStop;
}
}
答案 0 :(得分:2)
你需要使你的布尔变量volatile
private static volatile boolean isRequestToStop = false;
创建的线程有自己的isRequestToStop版本,不会从主内存中读/写,volatile会强制将你的变量刷新到主内存。
查看java文档以获取更多信息
https://docs.oracle.com/cd/E19683-01/806-5222/codingpractices-1/index.html