打印语句对变量的影响
来源:1-5 JAVA内存模型
ChlZhYa
2019-03-11
public class TestVolatile {
public static void main(String[] args) {
ThreadDemo td = new ThreadDemo();
new Thread(td).start();
while (true) {
// System.out.println();
if (td.isFlag()) {
System.out.println("**********");
break;
}
}}}
class ThreadDemo implements Runnable {
private boolean flag = false;
@Override
public void run() {
try {
Thread.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = true;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
老师,请问这个例子中,为什么循环中System.out.println();
被注释之后,while循环就不会退出(即td.isFlag()
的状态在主线程中没有被更新为true
)。然而放开注释之后,while循环就能读取到flag = true
写回答
1回答
-
你好,system.out.print这个方法你可以点进去看一下实现,里面是有synchronized的,这会导致变量强制同步,对多线程运行有很大影响。因此线上环境通常都不使用这个方法打印日志。
012019-03-11
相似问题
栈中存放基本数据类型变量和对象句柄?
回答 1
关于jmm中成员变量在内存中的位置的问题
回答 2