use*_*022 3 java thread-safety
我想要一个文件,从多个线程访问常量.为此安排一个有很多public static final ints 的课程是否安全?
是的,它是线程安全的.static final保证在类初始化后初始化任何变量.因此,一旦static final在代码中的任何地方使用包含这样的变量的类,它总是通过JVMS的要求完全初始化(即设置值).
对于原始int,这种情况甚至更严格.原始static final变量(同样适用String)是所谓的编译时常量,由Java编译器javac内联.唯一的要求是该值可以由Java编译器计算,即它不能是非常量评估的结果.正如您所写,您想要定义常量,我认为这不适用于您的用例.因此,这些常量值被直接复制到它们的访问位置,这减少了static final通过反射改变的变量的非线程安全性的角落 - 假设是非原始类型的问题.
此外,使用这些变量是一个好主意,因为它避免使用所谓的幻数.
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |