我正在开发一个程序,用于将文件从一个文件夹移动到另一个文件夹。 我有大约1000个文件,每个文件必须在固定的小时移动。 现在我正在使用像:
这样的计时器Timer timer = new Timer();
for (int k = 0; k < fileList.size(); k++) {
FileObj fileObj = fileList.get(k);
Calendar date = Calendar.getInstance();
date.add(Calendar.SECOND, fileObj.getTimeToLaunch());
CopyTask copyTask = new CopyTask();
copyTask.setTaskName("fileName");
timer.schedule(
copyTask,
date.getTime(),
1000 * 60 * 60 * 24 * 7
);
}
正如我现在所看到的,我只有一个线程可以完成这项工作。 问题是我必须在精确的时间移动每个文件,因此如果前一个文件移动的时间较长,则下一个文件将在稍后移动。 我正在考虑为每个文件创建一个计时器,但我不知道主机是否支持这么多线程。
我想知道什么是最好的选择? 或许是另一种解决方案中间的解决方案可能吗?
答案 0 :(得分:1)
定时器是一种非常简单的解决方案,非常适合小型定时需求。但是正如您所确定的那样,每个预定的执行都是相对于前一个执行的,这听起来并不适合您的情况。
我建议您查看广泛使用的开源quartz
调度程序。
答案 1 :(得分:0)
无论您使用quartz还是自己的解决方案,您的环境都必须支持足够的线程来同时复制大量文件。您需要同时移动多少个文件?
答案 2 :(得分:0)
您可以使用ScheduledExecutorService,因为它将处理多个线程。有关如何在API文档中使用它的示例。
它没有Quartz那么强大,但它非常简单,并且没有添加任何外部依赖。