java thread.sleep()在MacOS上显示睡眠后需要更长的时间

时间:2017-12-11 04:35:06

标签: java macos thread-sleep

目标是使当前线程休眠一段时间,范围从几百毫秒到几秒。当显示器打开时,程序正常运行。但是在显示进入睡眠模式后(在MacOS上,显示器可能会在一些系统空闲时间后进入休眠状态),Thread.sleep()将需要更长的时间才能返回。例如,

的Thread.sleep(5000); //睡5秒钟,但实际上需要30秒才能回来。

似乎cpu频率已经缩减,但java jre代码没有遵循这些变化。在MacOS 10.12 + Java 8上测试。

问题:如何制作线程睡眠代码来克服这个问题?

示例代码:两者都不能用于显示睡眠案例。

public static void threadsleep(long  milliseconds) { 
     try { 
         Thread.sleep(milliseconds); 
     } catch (InterruptedException ex) { 
         Logger.getLogger(FetchDailyOptions.class.getName()).log(Level.SEVERE, null, ex); 
     } 
 } 



 public static void threadsleep(long  milliseconds) { 
     try { 
         if (milliseconds < 100) { 
             Thread.sleep(milliseconds); 
             return; 
         } 

         long targetMilli = System.currentTimeMillis() + milliseconds; 
         for (;;) { 
             Thread.sleep(100); // wait 100 milliseconds 
             if (System.currentTimeMillis() > targetMilli) { 
                 return; 
             } 
         } 
     } 
     catch (InterruptedException ex) { 
         Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex); 
     } 

}

0 个答案:

没有答案