码上敲享录 > java面试题及答案大全 > 为什么说 Synchronized 是非公平锁?

为什么说 Synchronized 是非公平锁?

上一章章节目录下一章 2023-07-11已有222人阅读 评论(0)

Synchronized锁是一种非公平锁的原因在于其获取锁的机制。


在Java中,Synchronized锁是基于对象的内置锁(也称为监视锁或互斥锁)实现的。当一个线程想要获取某个对象的Synchronized锁时,它将会尝试去获取锁并进入临界区执行。如果锁已经被其他线程占用,那么当前线程将会被阻塞,等待锁的释放。


在非公平锁的情况下,当锁释放时,等待获取锁的线程们都有机会竞争锁的拥有权,无论它们是何时到达等待队列的。换句话说,先到先得的原则不一定适用于Synchronized锁。


这种非公平的锁获取机制可能会导致某些线程一直无法获取到锁,因为它们总是被后来到达的线程抢占。这可能引起线程饥饿现象,即某些线程长期等待锁的释放而无法得到执行的机会。


相对于公平锁而言,公平锁会按照线程的到达顺序来获取锁,从而保证所有线程都能被公平地获得执行的机会,不会出现线程饥饿现象。但是,使用公平锁会带来额外的开销,需要维护一个有序的等待队列,并增加了锁的竞争和上下文切换的开销。


需要注意的是,Synchronized锁虽然是非公平锁的默认行为,但是在部分Java虚拟机实现中,通过指定参数可以启用公平锁的机制。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交