私は数時間ごとにタスクを実行する必要があり、そのための最も効率的なソリューションを探しています。私は2つのアプローチについて考えました:
1)ビジーウェイト
while(true){
doMyJob()
wait(2*hour);
}
2)エグゼキュータスケジューリング:
executor.schedule(new MyJobTask(),2,TimeUnit.HOUR);
...
class MyJobTask implements Runnable{
void run(){
doMyJob();
...
executor.schedule(new MyJobTask(),2,TimeUnit.HOUR);
}
どのソリューションがより効率的で、どのような状況でそれぞれがより好ましいかを教えてください(もしあれば)。直感的には2つ目の解決策を選びましたが、直感を証明するものが見つかりませんでした。他に解決策がある場合は、共有してください。ソリューションはメモリ効率も高いはずです(そのため、私にはジレンマがあります。2時間ごとに単純なジョブを実行するためだけにThreadPoolオブジェクトを作成して保持する必要がありますか)。