它是 不是 安全的没有一个适当的内存屏障。
人们会认为缓存的分配(cache =
newCache)将在填充缓存的步骤之后进行。但是,其他线程可能会受到这些语句的重新排序的影响,因此分配似乎在填充缓存之前发生。因此,可以在新缓存完全构建之前获取它,甚至可以看到ConcurrentModificationException。
您需要强制执行before-before关系,以防止这种重新排序,并且将缓存声明为易失性即可实现这一点。
欢迎分享,转载请注明来源:内存溢出
它是 不是 安全的没有一个适当的内存屏障。
人们会认为缓存的分配(cache =
newCache)将在填充缓存的步骤之后进行。但是,其他线程可能会受到这些语句的重新排序的影响,因此分配似乎在填充缓存之前发生。因此,可以在新缓存完全构建之前获取它,甚至可以看到ConcurrentModificationException。
您需要强制执行before-before关系,以防止这种重新排序,并且将缓存声明为易失性即可实现这一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)