STATISCH {(*ALLTHREAD)}

Das Schlüsselwort STATIC wird verwendet:
  • So geben Sie an, dass eine lokale Variable im statischen Speicher gespeichert wird
  • So geben Sie an, dass dieselbe Kopie einer statischen Variablen für alle Threads in einer Multithread-Umgebung verfügbar ist
  • Gibt an, dass eine Java™ -Methode als statische Methode definiert ist.

Für eine lokale Variable einer Unterprozedurgibt das Schlüsselwort STATIC an, dass das Datenelement im statischen Speicher gespeichert werden soll, und hält dadurch seinen Wert über Aufrufe an die Prozedur, in der es definiert ist. Das Schlüsselwort kann nur innerhalb einer Unterprozedur verwendet werden. Alle globalen Felder sind statisch.

Das Datenelement wird initialisiert, wenn das Programm oder Serviceprogramm, in dem es enthalten ist, zum ersten Mal aktiviert wird. Sie wird nicht erneut reinitialisiert, auch wenn die Reinitialisierung für globale Definitionen als Teil der normalen Zyklusverarbeitung erfolgt.

Wird STATIC nicht angegeben, wird jedes lokal definierte Datenelement im dynamischen Speicher gespeichert. Im dynamischen Speicher gespeicherte Daten werden zu Beginn jedes Aufrufs initialisiert. Wenn eine Prozedur rekursiv aufgerufen wird, erhält jeder Aufruf eine eigene Kopie des Speichers.

Für jede Variable in einem Modul, in der THREAD (*CONCURRENT) in der Steuerspezifikation angegeben istgibt STATIC (*ALLTHREAD) an, dass dieselbe Instanz einer statischen Variablen von allen Threads verwendet wird. Wenn *ALLTHREAD nicht für eine statische Variable in einem Thread-Concurrent-Modul angegeben wird, befindet sich die Variable im threadlokalen Speicher, was bedeutet, dass jeder Thread eine eigene Instanz der Variablen hat.

Wenn Sie eine Kopierdatei haben, die mit oder ohne das Schlüsselwort THREAD (*CONCURRENT) in die Quelle kopiert werden kann, können Sie auf die vordefinierte Bedingung *THREAD_CONCURRENT prüfen, um zu steuern, ob das Schlüsselwort STATIC (*ALLTHREAD) eingeschlossen werden soll. Weitere Informationen finden Sie unter Bedingungen für Steuerspezifikationsschlüsselwörter .

Für die Verwendung des Schlüsselworts STATIC (*ALLTHREAD) gelten die folgenden Regeln:
  • STATIC (*ALLTHREAD) ist nur zulässig, wenn THREAD (*CONCURRENT) in der Steuerbestimmung angegeben ist.
  • Das Schlüsselwort STATIC wird für globale Variablen impliziert. Das Schlüsselwort STATIC kann für globale Variablen nur angegeben werden, wenn *ALLTHREAD als Parameter angegeben ist.
  • Eine mit STATIC (*ALLTHREAD) definierte Variable kann nicht mit der Adresse von Variablen initialisiert werden, die nicht auch mit STATIC (*ALLTHREAD) definiert sind.
ACHTUNG:
Es liegt an Ihnen, sicherzustellen, dass eine statische Variable, die in allen Threads verwendet wird, threadsicher behandelt wird. Weitere Informationen finden Sie im Abschnitt "Multithreading Considerations" in der Veröffentlichung Rational® Development Studio for i: ILE RPG Programmer's Guide.
Tipp: Es empfiehlt sich, eine Namenskonvention für Ihre statischen All-Thread-Variablen zu verwenden, um Wartungsprogrammierer und Codeprüfer darauf hinzuweisen, dass die Variablen eine besondere Handhabung erfordern. Sie können beispielsweise das Präfix ATS_ allen Variablennamen hinzufügen, die mit STATIC (*ALLTHREAD) definiert sind.

Für eine Java-Methodegibt das Schlüsselwort STATIC an, dass die Methode als statisch definiert ist. Wenn STATIC nicht angegeben wird, wird davon ausgegangen, dass es sich bei der Methode um eine Instanzdefinitionsmethode handelt. Sie müssen das Schlüsselwort STATIC für Ihren Prototyp nur codieren, wenn die Java-Methode das Attribut "static" hat. Der Parameter *ALLTHREAD ist nicht zulässig, wenn das Schlüsselwort STATIC für einen Prototyp angegeben wird.