jdk/src/share/classes/java/lang/ThreadGroup.java
/**
* Notifies the group that the thread {@code t} has terminated.
*
* <p> Destroy the group if all of the following conditions are
* true: this is a daemon thread group; there are no more alive
* or unstarted threads in the group; there are no subgroups in
* this thread group.
*
* @param t
* the Thread that has terminated
*/
void threadTerminated(Thread t) {
{- -------------------------------------------
(1) (以下の処理は, このインスタンスのロックを取った状態で行う)
---------------------------------------- -}
synchronized (this) {
{- -------------------------------------------
(1) java.lang.ThreadGroup.remove() で,
指定された Thread オブジェクトを threads フィールドから除去する
(同時に nthreads フィールドのデクリメントも行う).
---------------------------------------- -}
remove(t);
{- -------------------------------------------
(1) もし稼働中のスレッドがいなくなったら (= nthreads が 0 になったら),
この ThreadGroup 自身に対して java.lang.Object.notifyAll() を呼び出す.
(これはどういう処理?? Thread.join() みたいな感じで終了を待ち受ける為に使う?? #TODO)
---------------------------------------- -}
if (nthreads == 0) {
notifyAll();
}
{- -------------------------------------------
(1)
---------------------------------------- -}
if (daemon && (nthreads == 0) &&
(nUnstartedThreads == 0) && (ngroups == 0))
{
destroy();
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.