使 Java 程序在没有线程的情况下进入睡眠状态

2022-09-04 08:02:58

我有一个java程序,它执行一些计算,然后将结果上传到MYSQL数据库(托管在同一网络中的另一台计算机中)。我有时会遇到这样的问题,即程序进行计算的速度比上传结果的速度快。因此,它无法上传所有结果。程序当前未线程化。

有没有办法让程序在完成计算后休眠几毫秒,以便正确上传。(像其他语言一样,睡眠或等待功能)

我可以对程序进行线程处理,但那将是太多的重写。有没有更简单的方法?

谢谢


答案 1

有没有办法让程序在完成计算后休眠几毫秒,以便正确上传。(像其他语言一样,睡眠或等待功能)

Thread.sleep(milliseconds)是一个公共静态方法,也可以与单线程程序一起使用。类似于以下内容的是一个典型的模式:

try {
    // to sleep 10 seconds
    Thread.sleep(10000);
} catch (InterruptedException e) {
    // recommended because catching InterruptedException clears interrupt flag
    Thread.currentThread().interrupt();
    // you probably want to quit if the thread is interrupted
    return;
}

无需使用线程调用实现或执行任何其他操作。您可以随时调用它以在某些代码中暂停。Runnable


答案 2

您不必重新线程或任何类似的事情。您需要做的就是拨打:

Thread.Sleep(5000); // pause the app for 5 seconds

每个应用程序也是一个线程,在你的例子中也称为单线程应用。您可以使用线程 API,如 Sleep,而无需任何其他代码或重构。

不过要注意的是:如果您需要使用Thread.Sleep来管理您的控制流,那么在架构上可能存在问题。从你的OP中,我担心的是,在你所描述的单线程应用程序中,你似乎有一个操作“超过”另一个操作。这应该是不可能的,除非您从其他地方接收异步事件。

另一个警告:睡眠需要一个毫秒级参数,该参数通常是任意的,只是意味着“等待一会儿”。问题是,今天“一小段时间”可能没问题,但明天你的机器将承受更大的负载,“一小段时间”将不再足够好,你的睡眠将失效,同样的错误将出现。当然,您可以将时间设置为“很长一段时间”,但随后您将为每笔交易等待“很长一段时间”......第22条。