【发布时间】:2018-05-27 12:04:37
【问题描述】:
我最近偶然发现了一篇标题为 Synchronize access to mutable fields 的文章。它声称:
例如,在多线程环境中,可变字段的所有
get和set方法通常应该是synchronized方法。 这包括原始字段。
我的问题是为什么?同步getId 方法有什么用?或者如果我不同步它会发生什么。
例如,我将 UserContext 传递给 Spring Service 函数并在函数内调用 getUserId。如果getUserId 没有同步,这会不会是个问题?
【问题讨论】:
-
如果它是可变的,那么是的,它可能是个问题。它是否真的是一个问题取决于你的代码的细节。
-
如果用户 ID 是可变的,那么就没有人明白 ID 的用途。
-
任何时候你不遵守 JMM 都会有问题。 “会发生什么?”这个问题的实际答案。取决于平台(例如缓存一致性协议、CPU 存储缓冲区的工作方式、JIT 编译器生成的代码、是否放置了适当的 内存屏障 等...)。
标签: java spring multithreading synchronized