【问题标题】:Is using while loop in Java unsafe?在 Java 中使用 while 循环不安全吗?
【发布时间】:2013-08-15 20:56:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • “不保存”和“保存”是指“不安全”和“安全”吗?
  • 我认为这是 OP 的本意
  • 我很好奇,是什么让您认为它们可能不安全,您预计会有什么样的危险?
  • 我并不担心任何事情。我只想尽可能优化我的软件。为了做到这一点,我必须知道这一点。

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


【解决方案1】:

软件

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

硬件:

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

【讨论】:

  • @delnan 已提交编辑。不幸的是,我倾向于在编辑中发布和完成。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    我已经在超频 CPU 上运行线程忙碌等待多年。只要您有一个不错的冷却系统并且确实以这种方式运行所有内核,它就不会过热。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-05
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 2020-02-20
        相关资源
        最近更新 更多