2

java.util.Timerさまざまな理由により、代わりにこれを使用する必要があることはわかっています。だから、これを研究するために私はドキュメントを見ていて、いくつか質問があります:

  1. どのように動作しscheduleWithFixedDelay()ますか? 私の理解は次のとおりです。特定の遅延の後に最初にタスクを実行します。タスクが完了すると、指定された時間待機してから、タスクを再度実行します。
  2. scheduleAtFixedRate()指定された delay よりも実行に時間がかかるタスクを に送信するとどうなりますか? タスクを5秒ごとに実行したいのですが、完了するまでに10秒かかります。 私の理解では、タスクはキューに保持され、コアスレッドが利用可能になると実行されます
  3. scheduleWithFixedDelay()これがどのようにscheduleAtFixedRate()異なる かについての私の理解ですscheduleWithFixedDelay()。タスクの実行が完了するのを待ち、指定された時間だけ待ってから、タスクscheduleAtFixedRateが完了したかどうかを気にせずにタスクを起動し続けるタスクを再度起動します。正しい?
4

1 に答える 1

4
  1. 正しい。
  2. そうではありません。固定レートのタスクがその期間よりも長くかかる場合、タスクは完了するとすぐに再実行されますが、次の実行はスレッドを待機していません。下記参照。
  3. 固定レート タスク、固定遅延タスクと同様に、前回の実行が完了したかどうかを気にします。ドキュメントによると、「このタスクの実行にその期間よりも時間がかかる場合、後続の実行は遅れて開始される可能性がありますが、同時に実行されることはありません。」

次のように考えてください。

  • 固定遅延タスクの場合、実行間の正確な時間となる期間を指定します。タスクの実際の期間は、遅延には影響しません。
  • 固定レートのタスクの場合、実行間の最大時間となる期間を指定します。タスクの実際の期間がその期間よりも長い場合、レートは減少し、事実上遅延はありません。
于 2013-11-12T07:30:42.840 に答える