STATIC{(*ALLTHREAD)}

STATIC キーワードは次の目的で使用します。

サブプロシージャーのローカル変数の場合、STATIC キーワードは、データ項目が静的記憶域に記憶され、それにより、データ項目が定義されているプロシージャーに対する呼び出しの間はその値が保留されることを指定します。 このキーワードは、サブプロシージャーの中でのみ使用することができます。グローバル・フィールドはすべて静的です。

データ項目は、それが含まれているプログラムまたはサービス・プログラムが初 めて活動化された時に初期化されます。 通常のサイクル処理の一部としてグローバル定義について再初期化が行なわれ た場合であっても、データ構造が再び再初期化されることはありません

STATIC が定義されない場合には、ローカルに定義されたすべてのデータ項目は自 動記憶域に記憶されます。 自動記憶域に記憶されたデータは、すべての呼び出しごとにその始めに初期化さ れます。 プロシージャーが反復して呼び出された場合には、各呼び出しごとに記憶域の固有 のコピーが得られます。

制御仕様書で THREAD(*CONCURRENT) が指定されているモジュール内の変数の場合、STATIC(*ALLTHREAD) を使って、静的変数の同じインスタンスをすべてのスレッドで使用するように指定します。 並行スレッド・モジュール内の静的変数に *ALLTHREAD が指定されていない場合、その変数はスレッド・ローカル記憶域に置かれます。 つまり、各スレッドが、その変数のインスタンスを個別に持つことになります。

STATIC(*ALLTHREAD) キーワードの使用時には、以下の規則が適用されます。
注意:
すべてのスレッドで使用される静的変数がスレッド・セーフな方法で処理されるようにするのは、ユーザー自身の責任となります。「Rational Development Studio for i ILE RPG プログラマーの手引き」の「マルチスレッド化に関する考慮事項」の項を参照してください。
ヒント: すべてのスレッドの静的変数について命名規則を設けて、メンテナンス・プログラマーおよびコード・レビューアーに対して、それらの変数には特別な処理が必要であることを気付かせるようにすることをお勧めします。例えば、STATIC(*ALLTHREAD) を指定して定義されている変数名のすべてに接頭部 ATS_ を付ける、という方法があります。

Java メソッドの場合、STATIC キーワードは、そのメソッドが静的であることを指定します。STATIC が指定されていないと、そのメソッドはインスタンス・メソッドであると想定されます。 Java メソッドに「静的」属性が設定されている場合に限り、STATIC キーワードをプロトタイプにコーディングする必要があります。 プロトタイプに STATIC キーワードが指定されている場合には、*ALLTHREAD パラメーターを使用することはできません。