1

のソース コードを読んだとき、が とによって実装されているjava.util.Timerことがわかりました。java.util.TimerTimerThreadTaskQueue

java.util.Timerでキャンセルできると言われていますがjava.util.Timer.cancel()

しかし、私が呼び出すjava.util.Timer.cancel()と、Timer の TimerThread がまだ実行されていることがわかりました。

これはオンライン システムの問題ですか?

また、可能であれば、どうすればTimerThread車内に立ち寄ることができjava.util.Timerますか?


TimerThread(jdk 7)のソースから、最終的にTimer.cancel()動作することがわかりました。

TimerThread の待機 TaskQueueTimer.cancel()呼び出されたとき、TaskQueue 通知 TimerThread、および TimerThead は、`TaskQueue が EMPTY の場合に最終的に終了する必要があります...

コメントありがとうございます。お時間を無駄にして申し訳ありません。

4

3 に答える 3

2

タイマースレッドは引き続き実行されます。ただし、実装に従って、タイマースレッドはキューへの受け入れを停止します。

( TimerThread)スレッドには、クラスtimerを介してのみアクセスできます。クラス内にカプセル化されています。実装に関しては、タイマーがキューへの要求の受け入れを停止することを確認しましたが、それ自体は停止していません。TimerTimerThreadTimerTimerThread

于 2012-12-21T07:01:43.423 に答える
1

Timer実行するリストを保持する単一のスレッドです。Taskすべてのタスクが正常に実行されると、しばらくしてからTimerスレッドインスタンスが呼び出されますGarbage Collector

于 2012-12-21T07:15:39.833 に答える
0

これは役に立つかもしれません... このセクションでは、タイマー スレッドが終了しない場合の理由について説明します。

http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html

于 2012-12-21T06:58:21.177 に答える