Timer最适合用于文件调度程序吗?

时间:2011-05-13 16:07:00

标签: java multithreading timer

我正在开发一个程序,用于将文件从一个文件夹移动到另一个文件夹。 我有大约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
            );

            }

正如我现在所看到的,我只有一个线程可以完成这项工作。 问题是我必须在精确的时间移动每个文件,因此如果前一个文件移动的时间较长,则下一个文件将在稍后移动。 我正在考虑为每个文件创建一个计时器,但我不知道主机是否支持这么多线程。

我想知道什么是最好的选择? 或许是另一种解决方案中间的解决方案可能吗?

3 个答案:

答案 0 :(得分:1)

定时器是一种非常简单的解决方案,非常适合小型定时需求。但是正如您所确定的那样,每个预定的执行都是相对于前一个执行的,这听起来并不适合您的情况。

我建议您查看广泛使用的开源quartz调度程序。

答案 1 :(得分:0)

无论您使用quartz还是自己的解决方案,您的环境都必须支持足够的线程来同时复制大量文件。您需要同时移动多少个文件?

答案 2 :(得分:0)

您可以使用ScheduledExecutorService,因为它将处理多个线程。有关如何在API文档中使用它的示例。

它没有Quartz那么强大,但它非常简单,并且没有添加任何外部依赖。