有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

是否有一种方法可以让程序在完成计算后休眠几毫秒,以便正确地进行上传。(与其他语言中的睡眠或等待功能类似)

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

谢谢


共 (6) 个答案

  1. # 1 楼答案

    使用Thread.sleep()

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

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

  2. # 2 楼答案

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

  3. # 3 楼答案

    你不必重新线程或任何类似的事情。您只需拨打以下电话:

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

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

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

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

  4. # 4 楼答案

    只需使用:-

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

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

  5. # 5 楼答案

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

  6. # 6 楼答案

    Is there a way I can make the program sleep for a few milliseconds after it has done the calculations so that the upload takes place properly. (Like in other languages sleep or wait function)

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