【问题标题】:Java Thread.wait() warningsJava Thread.wait() 警告
【发布时间】:2014-01-23 10:13:35
【问题描述】:

当我将 Thread.wait() 包含在一个 while 循环中时,我的 IDE (NetBeans) 告诉我这可能会导致性能问题,如何解决?有没有办法解决它?

例子:

    while (timing){
        Thread.wait(10);
        foo++;
        }
    //Started in a seperate thread before activating.

编辑:感谢您的帮助,我将尝试改用“ScheduledExecutorService”!

【问题讨论】:

  • 提供更多背景信息,很难说是在没有更多信息的情况下睡觉或等待更好......
  • Thread 没有静态方法 wait。我希望你没有声明一个名为Thread 的变量。我们谈论的是同一个java.lang.Thread 还是你的线程是另一个类?
  • 在类似游戏循环的情况下,10ms 的延迟应该是可以的。 NickL 链接的问题包含有关此类睡眠可能导致性能问题的情况的更多信息。

标签: java multithreading performance wait


【解决方案1】:

您可能只想创建线程sleep,这就是您需要调用的方法的名称。

您调用了Object#wait(),这是一种线程协调 方法,并且您在其上使用了显式超时(相当短的超时)。我的猜测是 NetBeans 会警告您该超时,因为通常我们使用 Object#wait 没有超时,如果我们使用超时,我们不会在循环中使用 wait

现在,NetBeans 还会警告您在循环中使用 Thread.sleep(),因为通常,如果您想安排重复的任务(这就是您正在做的事情),您将使用 ScheduledExecutorService。该服务能够为您的应用程序周围的许多不同的计划任务提供服务,所有这些都使用一个线程。在循环中显式写入Thread.sleep() 会不必要地占用整个线程(重量级系统资源),大部分时间除了休眠之外什么都不做。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多