在Java中使用while循环不安全吗?

时间:2013-08-15 20:56:56

标签: java loops for-loop while-loop cpu-usage

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

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

我知道如果我把线程睡了一段时间,它在线程中是安全的。

但是快速持久的循环是不在睡眠线程安全的内部吗?

4 个答案:

答案 0 :(得分:2)

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

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

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

硬件方面,你面临的唯一危险就是过热。如果您不向用户销售硬件,则无法真正处理,因此不要担心因快速循环而造成硬件损坏。

答案 1 :(得分:2)

软件

不,不是真的。只要你没有导致持有锁的问题死锁代码的其他部分,并且你有有效的停止条件,所以用户不需要来杀死你的应用程序你应该没问题。 然而 ,如果您要创建新对象并保留对它们的引用,则可能会耗尽内存。

设备:

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

答案 2 :(得分:1)

我已经在一个超频的CPU上运行线程忙了好几年。只要你有一个像样的冷却系统,并以这种方式运行你所有的核心,它不应该过热。

我设计系统有一个或两个线程,故意忙着一直等待,永远不会阻塞或睡眠,以减少延迟。

答案 3 :(得分:1)

最好不要让线程循环,如果不是这样的话。您可以使用等待和通知(http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html)或条件来避免不必要地将线程留在循环中。也就是说,如果循环一直在工作,我就不会发现它有问题。