我有一段代码看起来像这样:

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可以执行某些操作,所以它可能只是执行该操作。如果您的应用程序不是多线程的,则根本无法运行。

08-04 06:21