如何在Java中从睡眠或休眠状态唤醒功能?

时间:2015-05-16 13:22:38

标签: java multithreading javafx sleep

我在后台运行线程,计算新的一天之前的时间,等待那个时间,然后更新我的UI。当计算机从睡眠或休眠状态唤醒时,如何使程序重启此线程?

1 个答案:

答案 0 :(得分:4)

您应该能够将系统配置为在系统启动时自动启动Java应用程序。问题是如何对系统冬眠做出反应。

这不是你要求的,但我认为这也是做同样的事情:在Java应用程序中,让你的睡眠持续时间更短(例如5分钟),然后在调用Thread.sleep()之前计算你认为的时间线程应该醒来。如果您醒来时的当前时间与您预期的显着不同,您可以假设系统处于休眠状态,您可以调整任何时间到新的估计值。当然,如果你每隔n分钟睡一觉,那么你可能只是将你的逻辑调整为睡眠n分钟或直到午夜,以较早者为准。

我在虚拟机上运行此代码,我可以暂停,并在虚拟机暂停时正确识别:

    long pause = 10000L;
    long error = 100L;

    while (true) {
        long sleepTil = System.currentTimeMillis() + pause + error;
        try { Thread.sleep(pause); } catch (InterruptedException e) { }
        if (System.currentTimeMillis() > sleepTil) {
            System.out.println("System was suspended");
        } else {
            System.out.println("System was not suspended.");
        }       
    }