【问题标题】:Thread.sleep performance vs other solutionsThread.sleep 性能对比其他解决方案
【发布时间】:2021-07-08 07:27:37
【问题描述】:

我正在开发一个 JavaFx 项目,其中有一个像这样的休眠方法:

 public void run() {
        while (true) {
                try {
                    method1()
                    Thread.sleep(2000);
                    Runnable1
                    Thread.sleep(10000);
                    if (condition 1){
                       method2
                       Thread.sleep(10000);
                    }else{
                       Runnable3
                       Thread.sleep(20000);
                    }
                    switch ()
                    case 1
                        Runnable 1
                       Thread.sleep(12000);
                    case 2
                      Runnable 4  
                      Thread.sleep(12000);
                    case 3
                     Thread.sleep(5000);
                    }
                } catch (InterruptedException ex) {
                    Thread.currentThread().interrupt();
                    break;
                }
        }

问题在于“case when and if else”的继承非常复杂(大约 20 个分支)。
有没有比始终使用“Thread.sleep”更好的方法。

【问题讨论】:

  • (顺便说一句:你不需要在循环内捕获InterruptedException然后中断:只需在循环外捕获它)
  • 按原样,这与 javafx 无关(除非你提到它;)
  • 看到这段代码 sn-p 结合 JavaFX 几乎让我心脏病发作;-(
  • 请参阅:stackoverflow.com/a/60685975/1043824 您想要实现的目标相当普遍,但不幸的是并不容易。如果这不能解决您的问题,请用您尝试过的方法以及有效或无效的方法更新您的问题。

标签: java multithreading sleep


【解决方案1】:

几乎总是Thread.sleep更好的方法。

它非常脆弱,因为无法保证“事情”会在睡眠时间内发生,除非您将睡眠时间延长到您等待不必要的长时间(即使那样,也没有保证)。

您可能正在等待某些条件发生变化;所以也许看看Condition;或查看Future(包括CompletableFuture)之类的内容,以便在上一个任务完成时执行某些操作。

【讨论】:

  • 这是一个javafx程序。这个想法是定期更新数据,具体取决于当前使用的屏幕。首先我做一般任务,然后我做与​​当前屏幕有关的任务,在一般任务之后,在当前屏幕任务之后等等......
  • 只要确保您没有在 JavaFX 线程中使用 Thread.sleep()。这将在线程休眠时冻结您的 gui。
  • @CMorell 我不确定你在告诉我什么:你是说所提议的方法行不通,因为它是一个 Javafx 程序?
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多