如何中断无限循环

13 浏览
0 Comments

如何中断无限循环

虽然我知道这个问题有点傻,但我还是想更多地了解一下技术角度的内容。\n一个简单的无限循环示例:\n

public class LoopInfinite {
    public static void main(String[] args) {
        for (;;) {
            System.out.println("Stack Overflow");
        }
    }
}

\n如何从这个类的外部(例如,通过继承的方式)中断(停止)这个无限循环?

0
0 Comments

无限循环的中断问题是出现在下面的代码中的。解决方法是使用Thread.stop()方法来中断线程,但是这种方法是不推荐的,更好的方法是使用Thread.interrupt()方法来中断线程。

在上述代码中,创建了一个名为"loop"的线程,该线程包含了一个无限循环,不断输出"."。然后在另一个类中,通过遍历线程组中的线程,找到名为"loop"的线程,并调用t.stop()方法来中断线程。

然而,这种方法存在竞争条件的问题,并且无法保证两个线程处于同一个线程组中,因此可能需要遍历更多的线程组。

如果有控制权的话,更好的方法是在循环声明中使用while(!isInterrupted()),并使用t.interrupt()方法来中断线程。

不建议使用这种方法来中断线程,虽然可以实现,但并不推荐使用。

0
0 Comments

无法从现有的内容中整理出该问题的出现原因和解决方法。

0
0 Comments

如何中断无限循环

有时候在编程过程中,我们会遇到无限循环的问题。无限循环指的是一个循环结构没有终止条件,导致程序陷入了死循环,无法继续执行下去。那么如何中断这个无限循环呢?下面是一些关于中断无限循环的讨论:

1. 从另一个线程中调用System.setOut()方法,传入一个实现了PrintStream接口的实现类,当调用println()方法时会抛出RuntimeException异常。可以通过调用System.setOut(null)来实现中断。

2. 从另一个线程中调用Thread.stop()方法来中断循环。可能是另一个类中的main方法调用了LoopInfinite.main(null)或类似的方法。我们无法确定,只有提问者才知道。

3. 当一个提问者在帖子中贴出了包含main方法的代码时,我们可以确定他的意思是这是程序的入口点。否则,为什么不假设存在一个AOP基础设施,可以在每次调用PrintStream.println()时注入任意代码,或者假设System实际上是一个import my.package.System,并且具有完全不相关的实现呢?

4. 可以在另一个答案中提到Thread.stop()方法,并包括线程访问。

5. 根据当前问题的描述,很难给出任何真正的答案。这个答案和其他答案一样好。否则,我建议你在所有(目前有12个)答案中都加上你的评论,因为它们都假设了一些情况。

6. 为了简单起见,我在main()方法中贴出了代码,你可以忽略它。感谢David和maba。

7. 你确实是指打印部分吗?因为如果线程陷入了没有向out打印的循环中,这个方法就不起作用了。一般的解决方案是使用Thread.stop()方法,但是调用该方法可能会导致许多问题。

8. 我希望这只是一个纯学术问题。

9. 这个解决方案最强大的地方在于它的幽默和独特思维方式,这就是为什么我喜欢它!

10. 谢谢你的解决方案,你能给出一个代码示例来说明如何实现吗?

11. 虽然这种超出常规思维的方法不错,但我害怕有人真的这样做。我宁愿编写修改有问题代码的字节码的代码,以在执行之前添加一个布尔检查,也不愿意这样做。

12. 你现在有点懒了,不是吗?根据他给出的信息,几乎可以由IDE自动生成大部分代码。你只需要添加"new"和"throw"这两个词。实际上,这里的第一个评论显示了一个完整的代码示例。

根据以上讨论,我们可以得出一些中断无限循环的方法。然而,我们需要谨慎使用这些方法,因为它们可能会导致其他问题的出现。无限循环应该被视为一个编程错误,我们应该尽量避免出现这种情况。

0