如果多个线程读取先前设置的原始类型并且以后不会更改,它们会得到错误的值吗?
例如,假设以下简单代码摘录:
public static final boolean proceed = read(); // Read the value from a file
public static void doSomething() // Method accessed by multiple threads
{
if (proceed)
{
System.out.println("TRUE");
}
else
{
System.out.println("FALSE");
}
}
假设proceed
变量被初始化为true
,是否有可能在同时运行该doSomething()
方法的多个线程中的一个或多个线程中,打印的消息是FALSE
?
如果proceed
变量是可变的,那肯定是可能的,因此需要同步或使用AtomicBoolean
(例如,根据这个问题)。但在这种情况下,proceed
它是不可变的,并且只在包含类的静态初始化期间设置一次。
类似地,对于其他原始类型,如果一个值设置为 final,那么以后访问它应该始终是线程安全的,对吗?