Javaに関する様々な情報をご紹介します。

5スレッドのグループ化

Javaに関する様々な情報をご紹介します。

スレッドのグループ化

このページではスレッドのグループ化についての説明を行います。スレッドのグループ化を行うことにより、そのスレッドグループに含まれるスレッドを一元管理することができるようになります。スレッドのグループ化はThreadGroupクラスにより実装されます。

スレッドグループの作成

スレッドを生成する際、スレッドをどのグループに含めるかの指定を行います。指定を行わない場合はそのスレッドを生成した時点のスレッドグループ(カレントスレッドグループ)と同じグループに属します。Javaが起動された時点ではmainという名前のスレッドグループが作られます。そのため、特にスレッドグループの指定をしない場合はmainスレッドグループに属することになります。アプレットの中でスレッドの生成を行った場合アプレットが動作しているブラウザやビューワによってはカレントスレッドグループがmainではない場合もあります。スレッドはスレッド生成時に属したスレッドグループに永久に属することになります。スレッドグループを途中で変更することはできません。

以下はスレッドグループ作成の際に使用されるコンストラクタです。

コンストラクタ 説明
ThreadGroup (String) 引数にスレッドグループ名を指定します。現在実行中のスレッドグループが、新しいスレッドグループの親スレッドグループになります。
ThreadGroup (ThreadGroup, String) 第1引数ThreadGroupに親スレッドグループを、第2引数Stringにスレッドグループ名を指定してスレッドグループの作成を行います。

例1

ThreadGroup ExThreadGroup =
    new ThreadGroup("MyThreadGroup");
//ExThreadGroupというスレッドグループの作成を行います。

スレッドをスレッドグループに含めるためにはスレッド生成の際、引数にスレッドグループを指定します。以下はスレッド生成時にスレッドグループを指定するために用意されているコンストラクタです。

コンストラクタ 説明
Thread
(ThreadGroup, Runnable)
第1引数ThreadGroupに生成するスレッドが属するスレッドグループ、第2引数Runnableにスレッドが実行するオブジェクトを指定してスレッドの作成を行います。
Thread
(ThreadGroup, String)
第1引数ThreadGroupに生成するスレッドが属するスレッドグループ、第2引数Stringにスレッド名を指定してスレッドの作成を行います。
Thread
(ThreadGroup, Runnable, String)
第1引数ThreadGroupに生成するスレッドが属するスレッドグループ、第2引数Runnableにスレッドが実行するオブジェクト、第3引数Stringにスレッド名を指定してスレッドの作成を行います。

例2

Thread ExThread =
    new Thread(ExThreadGroup, "membaer of ExThreadGroup");
//ExThreadスレッドを生成し、ExThradGroupグループに含めています。

ThreadGroupクラスのメソッド

ThreadGroupクラスにはスレッド管理のためにいくつかの便利なメソッドが用意されています。ここでは、そのメソッドのうちいくつかを紹介します。

戻り型 メソッド 説明
int activeCount( ) スレッドグループ内のアクティブなおおよそのスレッド数を返します。
int activeGroupCount( ) スレッドグループ内のアクティブなおおよそのスレッドグループ数を返します。
int getMaxPriority( ) スレッドグループの最高優先度を返します。
void setMaxPriority(int) スレッドグループの最高優先度を設定します。
String getName( ) スレッドグループ名を返します。
ThreadGroup getParent( ) 親スレッドグループ名を返します。
boolean isDaemon( ) スレッドグループがデーモンスレッドグループかどうかを判定します。
void setDaemon(boolean) スレッドグループのデーモンの状態を変更します。

5スレッドのグループ化