Java中的锁定效果

Ock*_*zor 5 java concurrency

有人知道锁定Java对程序执行速度的影响吗?如果有的话,我们如何克服这种影响?具体参考赞赏..

Arj*_*jms 5

如果您的应用程序主要是单线程的,那么在进行过多锁定时,您可能不会看到性能下降或性能下降很少。

通常,当使用 java.concurrent 库或内置的 synchronized 关键字时,可以非常快速有效地获取单个锁。他们使用锁省略、自适应锁定和锁粗化(参见Mustang 中的同步优化)等技术,这基本上意味着编译器和/或库会做一些非常聪明的事情来优化锁的使用。

这在真正不需要锁的情况下尤其明显;编译器将其优化掉。

但是,当许多线程需要获取相同的锁时,您最终会注意到,对于纯计算问题,内核的 CPU 负载永远不会达到 100%。实际上,某些事情并没有尽可能快地进行,而您的 CPU 只是闲置。

在没有(大量)IO 的情况下,这通常是过度的迹象,lock contention因此这确实会降低整体系统性能。