java - 如何在 Java 中触发 sleep 或 hibernate 唤醒功能?

标签 java multithreading javafx sleep

我有线程在后台工作,计算新一天之前的时间,等待那个时间,然后更新我的 UI。如何让程序在计算机从 hibernate 或 hibernate 状态唤醒时重新启动该线程?

最佳答案

您应该能够将您的系统配置为在系统启动时自动启动您的 Java 应用程序。问题是如何应对系统 hibernate 。

这不完全是您要求的,但我认为这做同样的事情:在 Java 应用程序中,缩短您的 sleep 时间(例如 5 分钟),然后在您调用 Thread.sleep() 之前计算您认为线程应该唤醒。如果您醒来的当前时间与您预期的时间有很大不同,您可以假设存在系统 hibernate 并且您可以调整任何时间到新一天的估计。当然,如果您以 n 分钟为间隔 sleep ,那么您可能只需调整您的逻辑以 sleep n 分钟或直到午夜,以较早者为准。

我在可以挂起的虚拟机上运行这段代码,它正确识别了 VM 挂起的时间:

    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.");
        }       
    }

关于java - 如何在 Java 中触发 sleep 或 hibernate 唤醒功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276202/

相关文章:

java - xmlhttp.setRequestHeader 不起作用

java - 在 Android 中比较两次

.net - 在AppDomain中终止任何托管线程时,可以调用任意代码吗?

javafx - 如何获取 TableView 中 ComboBoxTableCell 中选定的值

java - 如何为多个复选框创建一个 Action 事件?

java - Ant 包 org.junit 不存在

java - 为什么此代码不适用于通过 Android 进行 IMEI 调用?

java - 用于触摸包装器和 Google map fragment 的几个线程

c++ - 通知前完成手动解锁

java - 如何构建一个java项目?