public static void main(String[] args) throws IOException {
// new fetchEmailID().fetchIDs();
new UserInputAndDefaulValues().validateUserInputAndDefaultValues();
while(!UserInputAndDefaulValues.start_mailing_flag)
{
//System.out.println(UserInputAndDefaulValues.start_mailing_flag);
}
MainExecutor.main_executor();
}
当我取消注释时
//System.out.println(UserInputAndDefaulValues.start_mailing_flag);
while 循环中的条件正确工作并且 while 循环在 false 条件下结束。但正如我评论的那样,循环进入无限循环,即使它应该逃脱。为什么只有一个输出语句会出现这种行为?
最佳答案
首先,您的代码没有正确同步。换句话说,它在 start_mailing_flag
上包含一个数据竞争。
现在,PrintStream#println
方法是同步的
,因此调用它会强制 JIT 编译器避免某些优化(即 提升)有问题的代码。一旦删除该语句,效果就消失了。
总而言之,当您取消对 println
的注释时,您的代码纯属偶然并且作为调用同步
方法的副作用.它仍然像以前一样是线程不安全的。
关于java - 循环处理语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869782/