1

我听说 Java 中的循环需要最大的 CPU 能力才能尽可能快地运行。

使用长时间运行的 while 循环是否不安全?

我知道如果我让线程休眠一段时间,它在线程中是安全的。

但是,不在休眠线程内的快速持久循环是否安全?

4

4 回答 4

2

线程内不调用阻塞代码的长时间运行循环将使用高 CPU。

它们是安全的,因为它们不会导致您的软件崩溃,但可能应该避免,因为它们会导致用户的 PC 性能不佳。没有人喜欢不必要地使用整个内核的应用程序。

唯一不应该在长时间运行的循环中阻塞线程的情况是需要低延迟,而您没有其他解决方案。

在硬件方面,您面临的唯一危险是过热。如果你不向用户销售硬件,这真的无法处理,所以不用担心快速循环会损坏硬件。

于 2013-08-15T20:59:22.930 回答
2

软件

不,不是。只要您不会导致持有锁死锁其他代码部分的问题,并且您有有效的停止条件,因此用户不需要杀死您的应用程序,您应该没问题。但是,如果您正在创建新对象并持有对它们的引用,您可能会耗尽内存。

硬件:

包括 Java 在内的许多程序都有相当多的 CPU 使用和循环。游戏、其他编译器,甚至办公应用程序都可以做到这一点。事实上,许多程序都依赖于无限循环(尽管有一个停止条件,但它们可以是while(true)那种类型。可以产生热量,但没什么好担心的。

于 2013-08-15T21:01:05.973 回答
1

我已经在超频 CPU 上运行线程忙碌等待多年。只要你有一个体面的冷却系统并且以这种方式运行你所有的核心,它不应该过热。

我将系统设计为有一个或两个线程,它们故意一直忙于等待,从不阻塞或休眠,以最大限度地减少延迟。

于 2013-08-15T20:59:10.080 回答
1

如果没有必要,最好不要让线程循环。您可以使用 Wait and Notify ( http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html ) 或 Condition 来避免不必要地将线程留在循环中。也就是说,如果循环一直在工作,我不会看到它有问题。

于 2013-08-15T21:06:52.600 回答