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

Ank*_*Ank 12 java multithreading sleep

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

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

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

谢谢

Gra*_*ray 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;
}
Run Code Online (Sandbox Code Playgroud)

没有必要Runnable使用线程调用来实现或执行任何其他操作.你可以随时调用它来暂停某些代码.


Pau*_*sik 9

您不必重新编程或任何此类事情.你需要做的就是打电话:

Thread.Sleep(5000); // pause the app for 5 seconds
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @Ankur:看我最近的编辑.Thread.Sleep通常是修复计时问题的黑客.如果代码是您自己的代码,那么时间问题将由您自己创建.即睡眠是可以破解您无法控制的第三方API和服务,但如果您拥有代码,请不要急于使用它太快. (3认同)
  • 如果我是你,我会这样做:采取问题的基线样本.例如,明天有多少错过的参赛作品?然后扔进Sleep(5000)并记录事件数量.评估差异.如果它很重要,那么尝试解决日志记录和其他故障排除问题,不要使用Sleep作为拐杖.如果差异很小,除了计时之外还有其他问题. (2认同)