jdk/src/share/classes/java/lang/Thread.java
/**
* This method is called by the system to give a Thread
* a chance to clean up before it actually exits.
*/
private void exit() {
{- -------------------------------------------
(1) java.lang.ThreadGroup.threadTerminated() を呼び出して,
登録先の ThreadGroup (以下の group) からこのスレッドを除去しておく.
(ついでに, group フィールドは null にしておく)
(なお, null かどうかのチェックをしてから呼び出しているが
基本的に生存中は null ではないはずなので,
これは複数のスレッドが同時に java.lang.Thread.exit() を呼び出したときに
無駄に java.lang.ThreadGroup.threadTerminated() を呼び出さないための措置??? #TODO)
---------------------------------------- -}
if (group != null) {
group.threadTerminated(this);
group = null;
}
{- -------------------------------------------
(1) フィールドの値を明示的に消しておく.
(この理由は bug 4006245 を参照とのこと)
---------------------------------------- -}
/* Aggressively null out all reference fields: see bug 4006245 */
target = null;
/* Speed the release of some of these resources */
threadLocals = null;
inheritableThreadLocals = null;
inheritedAccessControlContext = null;
blocker = null;
uncaughtExceptionHandler = null;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.