STATIC{(*ALLTHREAD)}
使用 STATIC 关键字:
- 指定将局部变量存储在静态存储器中
- 指定静态变量的同一副本将可用于多线程环境中的所有线程
- 指定 Java™ 方法定义为静态方法。
对于子过程的局部变量, STATIC 关键字指定将数据项存储在静态存储器中,从而在定义该项的过程的调用中保留其值。 该关键字只能在子过程中使用。 所有全局字段都是静态的。
当第一次激活包含该数据项的程序或服务程序时,将初始化该数据项。 它 不会 再次重新初始化,即使在正常循环处理过程中对全局定义进行重新初始化也是如此。
如果未指定 STATIC ,那么任何本地定义的数据项都将存储在自动存储器中。 在每次调用开始时,都会初始化存储在自动存储器中的数据。 以递归方式调用过程时,每个调用都会获取其自己的存储器副本。
对于在 "控制" 规范上指定了 THREAD (*CONCURRENT) 的模块中的任何变量, STATIC (*ALLTHREAD) 指定所有线程都将使用同一静态变量实例。 如果未对线程并发模块中的静态变量指定 *ALLTHREAD ,那么该变量将位于线程本地存储器中,这意味着每个线程都将有自己的变量实例。
如果有一个复制文件可以使用或不使用 THREAD (*CONCURRENT) 关键字复制到源中,那么可以检查预定义的条件 *THREAD_CONCURRENT 以控制是否包含 STATIC (*ALLTHREAD) 关键字。 请参阅 与控制规范关键字相关的条件 以获取更多信息。
以下规则适用于 STATIC (*ALLTHREAD) 关键字的使用:
- 除非在 "控制" 规范上指定了 THREAD (*CONCURRENT) ,否则不允许 STATIC (*ALLTHREAD)。
- 对于全局变量,隐含 STATIC 关键字。 除非将 *ALLTHREAD 指定为参数,否则不能为全局变量指定 STATIC 关键字。
- 不能将使用 STATIC (*ALLTHREAD) 定义的变量初始化为未使用 STATIC (*ALLTHREAD) 定义的变量的地址。
注意:
由您来确保以线程安全的方式处理所有线程中使用的静态变量。 请参阅 Rational® Development Studio for i: ILE RPG Programmer 's Guide中的 "Multi线程注意事项" 部分。
提示: 最好为所有线程静态变量制定命名约定,以提醒维护程序员和代码复审者这些变量需要特殊处理。 例如,可以将前缀 ATS_ 添加到使用 STATIC (*ALLTHREAD) 定义的所有变量名。
对于 Java 方法, STATIC 关键字指定将该方法定义为静态。 如果未指定 STATIC ,那么假定该方法是实例方法。 当且仅当 Java 方法具有 "静态" 属性时,必须对原型的 STATIC 关键字进行编码。 当为原型指定 STATIC 关键字时,不允许 *ALLTHREAD 参数。