使用 jrlint 检查代码发现
@configurations ||= Configuration.all
提示
" [nonatomic, warning] Non-local operator assignment is not guaranteed to be atomic"
像这种 lazy initialization 的代码如何修改?
if Thread.current['Configuration'] .nil?
Thread.current['Configuration'] = Configuration.all
end
Thread.current['Configuration']
是这样写吗?
lazy initialization 主要问题是在进行初始化操作还没完成时,第二个线程插进来可能会返回一个空指针了,然后就挂了。 wiki 里面有介绍 java 使用双重检查锁定模式解决方法,另外这里也有介绍 jruby 的 lazy initialization 问题,不过并没有提到解决方法。