让java程序在没有线程的情况下休眠

时间:2012-02-24 22:45:35

标签: java multithreading sleep

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

有没有一种方法可以让程序在完成计算后睡几毫秒,以便正确上传。 (就像在其他语言中睡觉或等待功能)

我可以编程程序,但这将是太多的重写。有更简单的方法吗?

由于

8 个答案:

答案 0 :(得分:11)

  

有没有一种方法可以让程序在完成计算后睡几毫秒,以便正确上传。 (就像在其他语言中睡觉或等待功能)

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或执行任何其他操作。你可以随时调用它来暂停某些代码。

答案 1 :(得分:9)

您不必重新线程或任何此类事情。您需要做的就是致电:

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

每个应用程序也是一个线程,在您的情况下也称为单线程应用程序。您可以使用类似Sleep的线程API,无需任何其他代码或重构。

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

另一个警告:睡眠需要一个毫秒参数,通常是任意的,只是意味着“等一会儿”。问题是今天“一会儿”可能没问题,但是明天你的机器将承受更大的负荷并且“一会儿”将不再足够好,你的睡眠将会失效并且会出现相同的错误。当然,你可以将时间设置为“很长一段时间”但是你会等待“很长一段时间”进行每次交易......赶上22。

答案 2 :(得分:3)

使用Thread.sleep()

try
{
    Thread.sleep(1000); // Sleep for one second
}
catch (InterruptedException e)
{
    Thread.currentThread().interrupt();
}

这不会在程序中引入新的Thread或需要任何其他Thread相关机制。

答案 3 :(得分:1)

只需使用: -

try
{
Thread.sleep(<time in ms>);
}
catch(InterruptedException ex}
{
}

这将使当前线程(例如主线程)休眠。

答案 4 :(得分:0)

sleep()类中的静态方法java.lang.Thread在调用时暂停当前线程 - 可能只是主线程。你不需要做任何特别的事情来使用它。

答案 5 :(得分:0)

每个Java应用程序都在JVM的一个线程中执行。调用静态方法Thread.sleep将导致应用程序的线程(正在运行的线程)停止

答案 6 :(得分:0)

您的程序不是 - 螺纹...但它正在使用一个线程。 Thread.Sleep仍然有用。

答案 7 :(得分:0)

您可以在计算后使用Thread.sleep();,而无需使用线程重写整个程序!