我会尝试复制《Effective Java(第二版)》中提到的以下代码,它属于第10章并发性条目66。
根据作者的描述,当您运行以上过程段时,背景线程不会终止。但是在我设置了Java8环境的机器上无法复现此问题。那么这个问题是否已经在Java最新版本中得到优化呢?
更新: 我在Linux操作系统(Redhat)中再次尝试。它总是不终止。在我之前在Win7操作系统COREi5中运行它时,它总是终止。
PS: 在Linux操作系统(Redhat)中,如果按照上述代码和程序运行,程序将不会终止。但是,如果我在“while”循环中的“i ++”之后添加“System.out.println(i)”,此时程序将始终终止。这是我的新发现。如果您知道原因,请发布您的答案。我将继续钻研这些系列问题,直到找到真正的原因。
public class StopThread {
private static boolean stopRequested;
public static void main(String args[]) {
Thread backgroudThread = new Thread(new Runnable(){
public void run() {
int i = 0;
while(!stopRequested) {
i ++;
}
}
});
backgroudThread.start();
TimeUnit.SECONDS.sleep(1);
stopRequested = true;
}
}
根据作者的描述,当您运行以上过程段时,背景线程不会终止。但是在我设置了Java8环境的机器上无法复现此问题。那么这个问题是否已经在Java最新版本中得到优化呢?
更新: 我在Linux操作系统(Redhat)中再次尝试。它总是不终止。在我之前在Win7操作系统COREi5中运行它时,它总是终止。
PS: 在Linux操作系统(Redhat)中,如果按照上述代码和程序运行,程序将不会终止。但是,如果我在“while”循环中的“i ++”之后添加“System.out.println(i)”,此时程序将始终终止。这是我的新发现。如果您知道原因,请发布您的答案。我将继续钻研这些系列问题,直到找到真正的原因。