付録B.1 スレッド生成処理一覧
ここでは,次のAPIや機能がJavaVM内部で生成するスレッドについて説明します。
-
GUI関連のAPI
-
JMX関連のAPI
-
JNDI関連のAPI
-
RMI関連のAPI
-
そのほかのAPIや機能
(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種両方)
-
- java.awt.TrayIconクラス
-
UNIX環境でjava.awt.TrayIconインスタンスを生成すると,インスタンスごとに,一つのスレッドを生成します。
- javax.swing.JEditorPaneクラス
-
JEditorPaneインスタンスごとに,一つのスレッドを生成することがあります。
- javax.swing.JFileChooserクラス
-
javax.swing.JFileChooserインスタンスごとに,一つのスレッドを生成することがあります。
- javax.swing.JTableクラス
-
print()(5種類すべて)を呼び出すと,スレッドを一つ生成します。
- javax.swing.Timer
-
start()またはrestart()メソッドを呼び出すと,スレッドを一つ生成します。この呼び出しによるスレッドはTimerインスタンスごとに最大一つです。
- javax.swing.text.LayoutQueueクラス
-
addTask()メソッドを呼び出すと,スレッドを一つ生成します。この呼び出しによるスレッドはLayoutQueueインスタンスごとに最大一つです。
- javax.swing.text.JTextComponentクラス
-
print()(3種類すべて)を呼び出すと,スレッドを一つ生成することがあります。
- javax.swing.text.AsyncBoxViewクラス
-
次のメソッドを呼び出すと,API内部でLayoutQueueインスタンスを作成し,その延長でスレッドを生成することがあります。
-
preferenceChanged()
-
replace()
-
setSize()
-
- javax.swing.text.html.FormViewクラス
-
submitData()メソッドを呼び出すと,スレッドを一つ生成します。
- Appletの使用
-
UNIX環境でAppletを使用して警告アイコンが表示されると,スレッドを一つ生成します。
- インプットメソッドの使用
-
java.awt.imやjava.awt.im.spiで提供されるインプットメソッドを使用するとスレッドを生成することがあります。このスレッドはJavaプロセスで最大一つです。
(2) JMX関連のAPI
JMX関連のAPIで,次のスレッドを生成します。
- SNMP(Simple Network Management Protocol)によるリソース監視
-
SNMPを使用してリソースを監視・管理している場合,最大で九つのスレッドを生成します。
- 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()を呼び出すとスレッドを一つ生成します。
- 外部プロセスの作成
-
UNIX環境でjava.lang.ProcessBuilderクラスなどによって外部プロセスを作成すると,スレッドを一つ生成します。このスレッドはjava.lang.Processインスタンスごとに最大一つです。
- java.nio.channels.Selectorクラス
-
Windows環境でSelectorクラスを使用すると,Selectorインスタンスへのチャネルの登録数が1,024増えるごとに,スレッドを一つ生成します。
- java.util.prefs.Preferencesクラス
-
Preferencesクラスを使用すると,スレッドを一つ生成することがあります。このスレッドはJavaプロセスで最大一つです。
- javax.print.PrintServiceLookupクラス
-
javax.print.PrintServiceLookupを使用すると,スレッドを一つ生成します。このスレッドはJavaプロセスで最大一つです。
- sun.security.pkcs11.SunPKCS11クラス
-
sun.security.pkcs11.SunPKCS11インスタンスごとに,スレッドを一つ生成することがあります。