Solaris マルチスレッドオプション

形式

コマンド行フラグ:
     jdk-tool [-green | -native] options...
jdk-tool には java または appletviewer のどちらかを指定
環境変数:
% setenv THREADS_FLAG [-green | native]
デフォルトはグリーン (非ネイティブ) スレッドです。コマンド行フラグが指定されている場合は、THREADS_FLAG 環境変数の設定は無効になります。

使用するスレッドオプションを決定する方法

Solaris Java Development Kit には、スレッド処理ソフトウェアの実装が 2 つ含まれています。デフォルトのスレッド実装は「グリーン (非ネイティブ) スレッド」と呼ばれます。「ネイティブスレッド」も利用できます。

ネイティブスレッドは、実際の動作状況に応じて、デフォルトのグレーンスレッド実装よりも優れた機能を持ちます。ネイティブスレッドを使用した場合の利点を次に示します。

状況によっては、デフォルトのグリーンスレッドを使う方が賢明な場合もあります。マルチスレッドに対して安全 (MT-safe) でないネイティブコードは、ネイティブスレッドを使うと正しく動作しないことがあります。一般に、ネイティブの Solaris スレッド機構を直接使用していない場合は、ネイティブコードがスレッド環境で確実に正しく動作するように、-D_REENTRANT オプションを指定してコンパイルする必要があります。また、特定の Solaris インタフェースは、再入可能なバージョンを使う必要があります。

Solaris でのマルチスレッドプログラミングに関する仕様の情報については、AnswerBook『Solaris Software Developer Collection』の「マルチスレッドのプログラミング」を参照してください。この情報は、Web サイト docs.sun.com でも閲覧できます。

実行するコードの中のスレッド同期に関するバグは、グリーンスレッドを使用したときには隠れ、ネイティブスレッドで実行すると顕在化する可能性があります。自分のコードが 2 つのスレッドのパッケージで異なる動作をする場合は、この可能性を考慮すべきです。

選択したスレッドオプションを指定する方法

Solaris Java Development Kit のすべてのツールは、デフォルトではグリーンスレッドを使用します。ネイティブスレッドの使用を指定するには、THREADS_FLAG 環境変数を次のように設定します。

% setenv THREADS_FLAG native

グリーンスレッドを使用するように設定を戻すには、THREADS_FLAG の値を green に設定します。

% setenv THREADS_FLAG green

スレッドオプションは、JDK ツールに -native または -green コマンド行フラグを使用することによっても選択できます。スレッドフラグは、コマンド行で必ず最初のオプションとして指定します。

次に、コマンド行フラグの使用例を示します。

% java -native mypkg.MyClass
% appletviewer -green MyApplet.html

コマンド行フラグを使用すると、THREADS_FLAG 環境変数の設定は無効になります。