【发布时间】:2016-02-21 19:46:26
【问题描述】:
最近我和一个朋友讨论了 java 中的并发性,他问我为什么 synchronized 关键字在代码块或方法周围很慢。我回答说它很慢,因为它竞争对象监视器。它还提供了一个在保证之前发生的情况,它必须将其缓存中的所有变量与主内存同步,并且在块的末尾它必须刷新缓存。它还可以防止编译器以及 cpu 重新排序指令。然而,他说这些确实会导致速度放缓,但这并不是性能下降的主要原因。本质上,即使在线程遇到同步块时没有争用,它也会从用户模式切换到内核模式,并且线程必须保存状态,然后当它离开块时,它必须再次重新加载状态。我试图在网上找到描述这一点的文献,但我找不到任何文献。我想知道是否有人可以确认这是正确的?为什么java线程在达到同步时应该进入内核模式,为什么不在此之前?这与link中提出的问题不同,因为我在询问从用户模式到内核模式的显式切换,这会导致性能下降?
【问题讨论】:
-
反对者没有阅读问题。他们只是不喜欢你暗示 Java 同步很慢
标签: java multithreading