在编译时使用优化标志时,线程可能会被优化掉,因为编译器可能会对代码进行重新排序、删除无用代码等优化操作。为了解决这个问题,可以使用volatile
关键字来修饰线程中共享的变量,以确保线程不会被优化掉。下面是一个示例代码:
public class Main {
private volatile boolean isRunning = true;
public void startThread() {
Thread thread = new Thread(() -> {
while (isRunning) {
// do something
}
});
thread.start();
}
public void stopThread() {
isRunning = false;
}
public static void main(String[] args) {
Main main = new Main();
main.startThread();
// do something
main.stopThread();
}
}
在上面的代码中,使用了volatile
关键字修饰了isRunning
变量,确保了在编译时不会对其进行优化。这样,在启动线程后,即使在主线程中执行了一些其他操作,线程仍然会正常运行,直到isRunning
被设置为false
,线程才会停止。