java - ScheduledExecutorService 每次都开始晚

标签 java timer scheduled-tasks

我正在编写一小段具有 ScheduledExecutorService 的代码。

为此,我有以下代码:

Calendar fileTimestamp = Calendar.getInstance(); fileTimestamp.setTime(fileObj.getDateToCopy());

ScheduledExecutorService fileDispatcher = Executors.newScheduledThreadPool(5);
CopyTask  copyTask = new CopyTask();
long schedulerTrigger = fileTimestamp.getTimeInMillis() -   Calendar.getInstance().getTimeInMillis();

System.out.println("***[MAIN-INFO]["+fileObj.getFile_id()+"] fileTimeStamp:"+fileTimestamp.getTime());

System.out.println("***[MAIN-INFO]["+fileObj.getFile_id()+"] now
            TimeStamp:"+Calendar.getInstance().getTime()); 
System.out.println("[MAIN-INFO]["+fileObj.getFile_id()+"]
             scheduledTrigger [hh:mm:ss]: 
             "+formatDateDiff(schedulerTrigger) );
ScheduledFuture<?>  result = fileDispatcher.schedule(copyTask,
             schedulerTrigger, TimeUnit.MILLISECONDS);

当我们到达时间戳时,必须执行复制任务。 问题是copyTask执行得很晚:每次大约延迟3分钟。 以下消息:

***[MAIN-INFO][401850] fileTimeStamp:Tue May 17 17:09:38 CEST 2011
***[MAIN-INFO][401850] now TimeStamp:Tue May 17 17:07:38 CEST 2011
[MAIN-INFO][401850] scheduledTrigger [hh:mm:ss]:  0:2:0 (120000 ms) 

正在运行的任务的消息:

[401850-INFO] Launch time:Tue May 17 17:09:38 CEST 2011
[401850-INFO] Current time:Tue May 17 17:12:04 CEST 2011
[401850-INFO] Start copying FILE_ID=401850
[401850-INFO] Copy file OK

目前我在 CopyTask 中有以下代码:

public void run() {   

   System.out.println("["+taskId+"-INFO] Current time:"+new Date());
}

我们可以看到,启动时间(作业必须运行的时间)与当前时间(作业执行的实际时间)并不相同。

有人知道为什么这么晚吗?

最佳答案

忘记它吧。 现在看来有效了。我不知道为什么,因为我什么也没做。

关于java - ScheduledExecutorService 每次都开始晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6033145/

相关文章:

ios - CLLocationManager False didExitRegion

Laravel 5 命令调度程序,如何传入选项

java - Java 中的哪个 API 用于文件读取以获得最佳性能?

java - 从 JTextPane 复制/粘贴到其他应用程序,无需文本格式支持

c# - 如何制作一个wpf倒数计时器?

java - 调度程序在单元测试中工作不正确

c# - 如何在没有第三方库的情况下在 04 :00 every day in ASP . NET MVC 5.1 安排方法调用?

java - Solaris:与 ZFS 一起使用的虚拟片/磁盘

java - AlertDialog 上没有键盘,因为没有焦点在对话框上并且仍然在后台 Activity 上,如何解决?

javascript - 具有多个 setTimeout 的复杂递归函数调用(清除问题)