10

Timer に関連するサイトの記事では、Timer を使用してプログラミングする方法について説明しています。

別の質問をします。JavaはTimerメソッドをどのように実行しますか?

現在時刻が必要な時点かどうかを確認するためにwhileループを使用しないことで時間のかかる作業を避けると言われているので、単純にwhileループを使用して現在時刻と目的の時刻を確認して比較するだけではTimerは実装されていないと思います時点。

ありがとうございました!

4

2 に答える 2

4

タイマーは、while ループを使用して現在の時刻を目的の時点と継続的にチェックおよび比較するだけでは実装されていないと思います。

はい、そうです。唯一の最適化は次のとおりです。タスクの nextExecutionTime に基づく優先キューを使用しています。

JavaDoc 状態

Timer オブジェクトは、タイマーのすべてのタスクを順番に実行するために使用される単一のバックグラウンド スレッドです。タイマー タスクはすぐに完了する必要があります。タイマー タスクの完了に時間がかかりすぎると、タイマーのタスク実行スレッドが「占有」されます。これにより、後続のタスクの実行が遅延する可能性があります

タイマー クラスに含まれるもの

  1. TaskQueueこれは、nextExecutionTime で順序付けられた TimerTasks の優先キューです。
  2. TimerThread(queue)タイマーのタスク実行スレッドqueue.wait()。タイマー キューでタスクを待ちます ( )。

TimerThreadと比較してprivate void mainLoop() {
継続的while(true)にタスクをチェックし続ける場所がありますnextExecutionTimecurrentTimeMillis

                    currentTime = System.currentTimeMillis();
                    executionTime = task.nextExecutionTime;
                    if (taskFired = (executionTime<=currentTime)) {

到達した場合は呼び出します

            if (taskFired)  // Task fired; run it, holding no locks
                task.run();
于 2014-06-20T18:49:07.387 に答える
2

javadocによると

このクラスはリアルタイム保証を提供しません: Object.wait(long) メソッドを使用してタスクをスケジュールします。

コードを調べると、メイン ループと呼ばれるメソッドが見つかります。最初の数行を以下にコピーします。

private void mainLoop() {
    while (true) {
        try {

そして...その中でwhileループを使用しObject.wait()て、待機を行います。

于 2013-05-18T23:45:27.493 に答える