2011-05-13 8 views
1

私はあるフォルダから別のフォルダにファイルを移動するプログラムに取り組んでいます。 私は約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 
      ); 

      } 

: は今、私は次のようにタイマーを使用しています。 問題は、各ファイルを正確な時間に移動しなければならないということです。そのため、前のファイルを移動する時間が長い場合は、後のファイルを後で移動します。 ファイルごとに1つのタイマーを作成することを考えていますが、ホストが非常に多くのスレッドをサポートするかどうかはわかりません。

私は何が最善の選択でしょうか? または別の解決策ですか?中間的な解決策かもしれない?

+1

スレッドが複数あるうちに、ドライブが1つしかないと思われます。 CPUはあなたのボトルネックではなく、あなたのドライブはです。 ;) –

答えて

1

タイマーは非常に簡単なソリューションであり、小さなタイミングが必要な場合に非常に効果的です。しかし、あなたが特定したように、スケジュールされた実行は、あなたの状況に理想的ではない以前のものとの相対的なものです。

広く使用されているオープンソースのquartzスケジューラを見てみることをおすすめします。

0

クォーツを使用する場合でも独自のソリューションを使用する場合でも、多数のファイルを同時にコピーするのに十分なスレッドをサポートする必要があります。同時に移動するファイルの数はいくつですか?

0

ScheduledExecutorServiceは複数のスレッドを処理するため、ScheduledExecutorServiceを使用できます。 APIドキュメントで使用する方法の例があります。

これはQuartzほど強力ではありませんが、非常に簡単で外部依存関係はありません。

関連する問題