付録B.1 スレッド生成処理一覧
(1) GUI関連のAPI
GUI関連のAPIで,次のスレッドを生成します。
- 特定の条件なし
- AWTまたはSwingのGUI機能を使用すると,スレッドを生成することがあります。作成するスレッドはJavaプロセスで最大六つです。
- java.awt.EventQueueクラス
- EventQueueインスタンスごとに,一つのスレッドを生成することがあります。
- java.awt.FileDialogクラス
- show()メソッドを呼び出すと,スレッドを一つ作成します。この呼び出しによるスレッドはFileDialogインスタンスごとに最大一つです。
- java.awt.image.renderable.RenderableImageProducerクラス
- startProduction()メソッドを呼び出すとスレッドを一つ生成します。
- java.awt.print.PrinterJobクラス
- 次のメソッドを呼び出すと,スレッドを一つ作成します。
- print()(2種両方)
- printDialog()(2種両方)
- pageDialog()(2種両方)
- javax.swing.JEditorPaneクラス
- JEditorPaneインスタンスごとに,一つのスレッドを生成することがあります。
- javax.swing.JFileChooserクラス
- javax.swing.JFileChooserインスタンスごとに,一つのスレッドを生成することがあります。
- javax.swing.JTableクラス
- print()(4種類すべて)を呼び出すと,スレッドを一つ生成します。
- javax.swing.Timer
- start()またはrestart()メソッドを呼び出すと,スレッドを一つ生成します。この呼び出しによるスレッドはTimerインスタンスごとに最大一つです。
- javax.swing.text.LayoutQueueクラス
- addTask()メソッドを呼び出すと,スレッドを一つ生成します。この呼び出しによるスレッドはLayoutQueueインスタンスごとに最大一つです。
- javax.swing.text.AsyncBoxViewクラス
- 次のメソッドを呼び出すと,API内部でLayoutQueueインスタンスを作成し,その延長でスレッドを生成することがあります。
- preferenceChanged()
- replace()
- setSize()
- javax.swing.text.html.FormViewクラス
- submitData()メソッドを呼び出すと,スレッドを一つ生成します。
- インプットメソッドの使用
- java.awt.imやjava.awt.im.spiで提供されるインプットメソッドを使用するとスレッドを生成することがあります。このスレッドはJavaプロセスで最大一つです。
(2) JMX関連のAPI
JMX関連のAPIで,次のスレッドを生成します。
- SNMP(Simple Network Management Protocol)によるリソース監視
- SNMPを使用してリソースを監視・管理している場合,最大で9個のスレッドを生成します。
- javax.management.remote.rmi. RMIConnectionインターフェース
- RMIConnectionインターフェースを実装したクラスのインスタンスごとに,一つのスレッドを生成することがあります。
- javax.management.remote.rmi.RMIConnectorクラス
- connect()(2種両方)メソッドを呼び出すと,確立した接続一つごとにスレッドを二つ生成します。
(3) JNDI関連のAPI
JNDI関連のAPIで,次のスレッドを生成します。
- 特定の条件なし
- ネーミングやディレクトリの操作で,JNDIコンテキスト一つごとにスレッドを二つ生成します。
- javax.naming.event.EventContextインターフェース
- EventContextインターフェースを実装したクラスのaddNamingListene()(2種両方)メソッドを呼び出すと,一つのスレッドを作成することがあります。この呼び出しによるスレッドはディレクトリコンテキストごとに最大一つです。
(4) RMI関連のAPI
RMI関連のAPIで,次のスレッドを生成します。
- RMIサーバ側
- JavaVM内部で次のスレッドを生成します。
- 特定の条件なしに最大六つのスレッドを作成します。このスレッドはJavaVMプロセスの終了まで維持されます。
- RMIクライアントから接続待機向けに,リモートオブジェクトをエクスポートしたTCPポート数分のスレッドを生成します。
- RMIクライアントからのメソッド呼び出しがあると,その制御のため一つのスレッドを生成します。
- java.rmi.server.Unreferencedインターフェースを実装したリモートオブジェクトのunreferenced()メソッド呼び出し向けに,一つのスレッドを生成します。
- RMIクライアント側
- 接続しているRMIサーバと同数のスレッドを生成します。
(5) そのほかのAPIや機能
そのほかのAPIや機能で,次のスレッドを生成します。
- HTTP/HTTPS通信
- HTTP/HTTPS通信をするとKeep Aliveの制御のためスレッドを一つ生成します。このスレッドはJavaプロセスで最大一つです。
- DNS通信
- Windows環境でDNS通信をすると,スレッドを一つ生成することがあります。このスレッドはJavaプロセスで最大一つです。
- ファイナライザの明示実行
- java.lang.Systemクラスやjava.lang.RuntimeクラスのrunFinalization()を呼び出すとスレッドを一つ生成します。
- ファイナライズ滞留解消機能
- ファイナライズ処理が滞留した場合,滞留解消のためにスレッドを一つ生成します。
- なお,ファイナライズ滞留解消機能はデフォルトで有効なJavaVMの機能で,-DJP.co.Hitachi.soft.jvm.autofinalizerプロパティで有効と無効を制御できます。
- 外部プロセスの作成
- UNIX環境でjava.lang.ProcessBuilderクラス等によって外部プロセスを作成すると,スレッドを一つ生成します。このスレッドはjava.lang.Processインスタンスごとに最大一つです。
- java.nio.channels.Selectorクラス
- Windows環境でSelectorクラスを使用すると,Selectorインスタンスへのチャネルの登録数が1,024増えるごとに,スレッドを一つ生成します。
- java.util.prefs.Preferencesクラス
- Preferencesクラスを使用すると,スレッドを一つ生成することがあります。このスレッドはJavaプロセスで最大一つです。