我有一段代码看起来像这样:
Algorithm a = null;
while(a == null)
{
a = grid.getAlgorithm();
}
Grid类中的getAlgorithm()根据用户从某些选项中选择的内容返回算法的某些子类型。
我的问题是,即使选择了算法,循环也永远不会终止。但是,如果我只是简单地放置System.out.println(“ Got here”);,那并不是什么棘手的事情。在我调用getAlgorithm()之后,程序运行得非常好,循环按预期终止。
我的问题是:为什么添加该魔术打印语句突然使循环终止?
而且,当我开始使用新笔记本电脑时,这个问题首先出现了,我怀疑这是相关的,但是我认为这值得一提。
编辑:有问题的程序不是多线程的。 getAlgorithm()的代码为:
public Algorithm getAlgorithm ()
{
return algorithm;
}
其中algorithm最初为null,但会在某些用户输入时更改值。
最佳答案
您正在进行主动轮询。这是一个坏习惯。您至少应该让轮询线程进入睡眠状态(使用Thread.sleep)。由于println可以执行某些操作,所以它可能只是执行该操作。如果您的应用程序不是多线程的,则根本无法运行。