静的で定期的なJavaタイマー/タイマータスクがあり、アプリがシャットダウンしたときにシャットダウンしたいと思います。一部のスレッドがまだ実行されているため、アプリがハングしたくありません(Eclipseのデバッグモードで発生するように、一部の環境ではとにかく問題が発生する可能性があります)。私が静的にしている理由は、Timerを使用して、含まれているすべてのクラスのインスタンスにいくつかの(非常に単純な、おそらく単なるカウンター)共有メモリを使用することを計画しているため、クラススコープが適切であると感じています。
私の質問は、タイマーのシャットダウンをどのように行うのが最善かということです。これはファイナライズを使用するのに適切な時期ですか?このタイマーは十分に良性のように思われるので、ファイナライズするための非決定的な呼び出しが機能する可能性がありますか?クラスのインスタンスがもう存在しないことを確認するために、おそらく何らかのインスタンスカウントを行う必要がありますか?静的タイマーのシャットダウンを管理する方法に関する提案を歓迎します。
擬似コード:
class foo {
private static Timer someTimer = null;
public foo() {
if(someTimer == null) {
someTimer = new Timer(new TimerTask(...));
}
}
//how should I shut this thing down?
protected void finalize() throws Throwable {
}
//or is better to have shutdown() called explicitly?
}