Fork me on GitHub

synchronized 关键字为什么会引入锁的竞争

正文

synchronized 关键字用于实现线程同步,它可以保证在同一时间只有一个线程能够执行被 synchronized 修饰的代码块或方法。当一个线程获取了对象的锁,其他线程需要等待该线程释放锁才能继续执行。

当多个线程同时竞争同一个锁时,就会发生锁的竞争。这种竞争会导致多个线程按顺序排队等待锁的释放,从而引入性能问题。具体来说,锁的竞争可能导致以下情况:

  1. 线程争用:多个线程同时竞争同一个锁,会导致线程进行上下文切换,从而增加了线程切换的开销。
  2. 阻塞等待:当一个线程获取了锁,其他线程需要等待,直到该线程释放锁。这会导致其他线程阻塞,降低了并发性能。
  3. 锁饥饿:如果某个线程频繁地获取锁,其他线程无法获得执行的机会,会导致其他线程长时间等待锁,造成锁饥饿的情况。

因此,当多个线程同时竞争同一个锁时,就会引入锁的竞争问题,进而影响程序的性能。在高并发场景中,合理设计并发控制机制,避免不必要的锁竞争,可以提高程序的并发性能。

,