相关疑难解决方法(0)

易失性变量"读取"和正常读取一样快吗?

我知道写入volatile变量会将其从所有cpus的内存中刷新,但是我想知道对volatile变量的读取是否和正常读取一样快?

volatile变量永远被放置在CPU缓存或者它总是从主存储器中获取?

java performance multithreading volatile

39
推荐指数
3
解决办法
6386
查看次数

为什么在执行双重检查锁定时将volatile字段复制到局部变量

我正在阅读关于双重检查锁定的信息Effective Java.代码执行以下操作:

private volatile FieldType field;  
FieldType getField() {  
    FieldType result = field;  
    if (result == null) { // First check (no locking)  
        synchronized(this) {   
        result = field;  
        if (result == null) // Second check (with locking)  
            field = result = computeFieldValue();  
        }  
    }  
    return result;  
}    
Run Code Online (Sandbox Code Playgroud)

它说使用result似乎不需要但实际上确保field只在已经初始化的常见情况下只读取一次.

但我不明白这一点.与if(field == null)直接做什么有什么区别?我不明白为什么if (result == null)会有所不同,更不用说如上所述了.

java concurrency multithreading synchronization effective-java

5
推荐指数
2
解决办法
410
查看次数