前几天,在敲到一个代码,碰到如下情况:
@Override
public void run()
{
while(true)
{
// 注释句在此 System.out.println(flag);
if (flag)
{
System.out.println("flag is true");
// 当标识位为true时,执行到这里,转为false
flag = false;
}
}
}
情况是,我在外部改变flag的值,每隔0.5秒就在外部将flag设置为true。结果这段代码中注释句去掉注释的话,会有"flag is true"的输出,但是注释加上的话,就永远不会输出"flag is true"
有谁可以给出个合理解释吗?
全部代码如下:
class MyThread extends Thread
{
// 设置标识位
private boolean flag = false;
public void setFlag()
{
flag = true;
}
// 线程执行
@Override
public void run()
{
while(true)
{
// System.out.println(flag);
if (flag)
{
System.out.println("flag is true");
// 当标识位为true时,执行到这里,转为false
flag = false;
}
}
}
public static void main(String[] args)
{
MyThread t = new MyThread();
t.start();
// 每隔0.5秒设置标识位为true
while (true)
{
try{
Thread.sleep(500);
} catch (InterruptedException e)
{}
t.setFlag();
}
}
}