コマンド行フラグ:jdk-tool [-green | -native] options...jdk-tool には環境変数:java
またはappletviewer
のどちらかを指定デフォルトはグリーン (非ネイティブ) スレッドです。コマンド行フラグが指定されている場合は、% setenv THREADS_FLAG [-green | native]THREADS_FLAG
環境変数の設定は無効になります。
Solaris Java Development Kit には、スレッド処理ソフトウェアの実装が 2 つ含まれています。デフォルトのスレッド実装は「グリーン (非ネイティブ) スレッド」と呼ばれます。「ネイティブスレッド」も利用できます。
ネイティブスレッドは、実際の動作状況に応じて、デフォルトのグレーンスレッド実装よりも優れた機能を持ちます。ネイティブスレッドを使用した場合の利点を次に示します。
- マルチプロセッサ環境で Java コードを実行する場合、Solaris カーネルはパフォーマンスの向上のために、並列プロセッサ上でネイティブスレッドをスケジューリングすることができます。これに比べ、グレーンスレッドは、ユーザレベルだけで存在し、オペレーティングシステムによって複数のカーネルスレッドに割り当てられることはありません。並行処理によるパフォーマンスの向上は、グリーンスレッドでは実現できません。
- ネイティブスレッド実装では、Solaris のネイティブスレッドを使用する C ライブラリへの呼び出しが可能です。このようなライブラリは、グリーンスレッドでは使用できません。
- ネイティブスレッドを使用する場合、VM は、グリーンスレッドを使用するときに必要な非効率的な入出力システムコールの再マッピングをある程度避けることができます。
状況によっては、デフォルトのグリーンスレッドを使う方が賢明な場合もあります。マルチスレッドに対して安全 (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
環境変数の設定は無効になります。