HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

Thread#getStackTrace() メソッド

次のクラスやメソッド

Java 2 SE 1.4 で追加されているのでちょっと混乱するのだが。

java.lang.Thread クラスには Java 2 SE 5.0 で getStackTrace() メソッドが追加されている。また、それに合わせて(?)なのか、StackTraceElement クラスにコンストラクタが追加されている。

java.lang.Throwable#getStackTrace() メソッドjava.lang.Thread#getStackTrace() メソッドもオーバーライド可能なので、スタックトレースを取得させたくないという場合には隠すことが可能らしい(ただし、そのほかのメソッドも適切にオーバーライドする必要があると思うが‥)。

一応、Thread#getStackTrace() メソッドのソースを見てみると、次のような処理をしている。

  1. Thread オブジェクトがカレントスレッドでなければセキュリティチェック (SecurityConstants.GET_STACK_TRACE_PERMISSION)
  2. Thread#isAlive() が false を返すならば、EMPTY_STACK_TRACE (長さ 0 (zero) の配列) を返す
  3. スレッドの全スタックトレースを返す