`
xussen
  • 浏览: 31522 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

公平锁的性能比非公平锁的性能低

 
阅读更多
为什么说公平锁的性能比非公平锁的性能低
      在没有深入了解内部机制及实现之前,先了解下为什么会存在公平锁和非公平锁。公平锁保证一个阻塞的线程最终能够获得锁,因为是有序的,所以总是可以按照请求的顺序获得锁。不公平锁意味着后请求锁的线程可能在其前面排列的休眠线程恢复前拿到锁,这样就有可能提高并发的性能。这是因为通常情况下挂起的线程重新开始与它真正开始运行,二者之间会产生严重的延时。因此非公平锁就可以利用这段时间完成操作。这是非公平锁在某些时候比公平锁性能要好的原因之一。
分享到:
评论

相关推荐

    java 线程公平锁与非公平锁详解及实例代码

    Java线程公平锁与非公平锁是并发编程中重要的概念,尤其在使用ReentrantLock时。ReentrantLock是Java并发包(java.util.concurrent)中的一个可重入互斥锁,它提供了比内置的synchronized关键字更为灵活的锁操作。 ...

    Java线程公平锁和非公平锁的差异讲解

    - 在低竞争环境下,公平锁和非公平锁的性能差距可能不明显,但公平锁能保证线程调度的公平性。 **选择策略**: 选择使用哪种锁,取决于具体应用场景的需求。如果对线程公平性有严格要求,避免线程饥饿,那么应选择...

    第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()1

    《深入理解ReentrantLock:非公平锁与公平锁的实现》 ReentrantLock作为Java并发编程中的重要工具,它的灵活性和高效性使得它在多线程环境下被广泛使用。本篇文章将深入解析ReentrantLock的源码,重点讨论非公平锁...

    多线程(11)ReentrantLock公平锁与非公平锁(修改)1

    非公平锁虽然可能导致某些线程等待时间变长,但在大多数情况下,它的吞吐量通常优于公平锁。 总的来说,这段代码展示了`ReentrantLock`的公平和非公平锁的使用,并通过`CountDownLatch`进行多线程同步。了解这两种...

    Java concurrency之非公平锁_动力节点Java学院整理

    非公平锁的优点是可以提高并发执行的效率,因为它可以减少线程等待的时间,提高系统的整体性能。但是,非公平锁也存在一些缺陷,例如,它可能会导致某些线程长时间等待,无法获取锁。 非公平锁是java concurrency...

    lock4j高性能分布式锁 v2.2.5.zip

    3. **灵活性**:提供了公平锁和非公平锁两种模式,公平锁保证了等待锁的线程按照请求顺序获取锁,而非公平锁则更注重效率,允许线程跳过队列提前获取锁。 4. **自动解锁**:lock4j支持自动解锁功能,避免了因为程序...

    java并发之ReetranLock

    公平锁的处理逻辑与非公平锁基本上是一致的,唯一的不同在于增加了 hasQueuedPredecessors 的逻辑判断,方法名就可知道该方法用来判断当前节点在同步队列中是否有前驱节点的判断,如果有前驱节点说明有线程比当前...

    linux下实现高性能读写锁(read/write lock)

    - **公平性**:锁的获取策略可以是公平(FIFO)或非公平(FILO)。公平策略保证等待时间最长的线程优先获得锁,而非公平策略则允许新来的线程插队。 - **死锁预防**:避免死锁的关键是遵循正确的加锁顺序,防止循环...

    各种API性能_性能优化技巧

    但在高竞争场景下,不公平锁的性能要好得多。 - **公平性与性能权衡**: - 在性能方面,`synchronized > UnfairLock > FairLock`。 - 在公平性方面,`FairLock > synchronized > UnfairLock`。 - 如果不需要多个`...

    21 更高级的锁—深入解析Lock.pdf

    sync对象是一个抽象类,有两个具体实现:FairSync(公平锁)和NonfairSync(非公平锁)。它们都继承自AbstractQueuedSynchronizer(AQS),AQS维护了一个volatile状态字段state,用于表示锁的状态,以及一个FIFO等待...

    Java锁的种类以及区别

    #### 一、公平锁与非公平锁 **1. 公平锁** 公平锁遵循先进先出的原则,即线程获取锁的顺序与其请求锁的顺序相同。这种锁可以确保没有线程被饿死,但同时也可能导致性能上的问题,因为如果多个线程都在等待同一个锁...

    提升Java的锁性能Java开发Java经验技巧共5页.p

    在Java开发过程中,锁性能是决定程序并发效率的关键因素之一。高效的锁机制能够确保多线程环境中的数据一致性,减少资源争抢,从而提高应用程序的性能。本篇内容将深入探讨如何提升Java的锁性能,结合Java开发的经验...

    Java 中15种锁的介绍

    1. **公平锁 / 非公平锁** - **公平锁** 保证了等待锁的线程按照申请顺序获得锁,避免了饥饿现象。 - **非公平锁** 允许线程抢占,可能导致优先级反转或饥饿,但其吞吐量通常高于公平锁。Java中的`ReentrantLock`...

    ReentrantLock源码的使用问题详解.docx

    本文将深入探讨ReentrantLock的原理,特别是其公平锁与非公平锁的概念,以及ReentrantLock的源码解析。 首先,我们了解什么是可重入锁。可重入锁允许一个线程多次获取同一锁,而不被阻塞。当一个线程已经持有了锁,...

    Java并发编程之美_部分31

    本篇章节主要讲解了 Java 中的并发编程相关知识,包括乐观锁、公平锁、非公平锁、独占锁和共享锁等概念。 首先,介绍了乐观锁的概念,乐观锁是一种无锁机制,通过在表中添加版本号或业务状态来实现锁定。这种锁定...

    Java concurrency之公平锁(一)_动力节点Java学院整理

    通过深入理解公平锁的工作原理,开发者可以更好地设计和优化多线程程序,避免线程间的不公平竞争,提高系统的整体性能。在实际开发中,选择合适的锁类型和策略,能够有效地平衡线程间的公平性和效率。

    22 到底哪把锁更适合你?—synchronized与ReentrantLock对比.pdf

    反之,如果线程持有锁的时间很短,非公平锁通常会有更好的性能,因为减少了线程等待的平均时间。 5. **使用上的差异**: - `synchronized`使用直观,只需将代码块包围在`synchronized`关键字内,锁的获取和释放由...

    ReentrantLock 与 synchronized 简介

    - 它支持公平和非公平两种获取锁的策略,默认为非公平锁。 2. **重要特性**: - **可中断等待**:通过`lock.tryLock()`和`lock.tryLock(long timeout, TimeUnit unit)`方法,可以在等待获取锁时响应中断。 - **...

    Java中的锁分类与使用.docx

    - **公平锁**按照请求锁的顺序进行分配,保证线程等待的公平性,但可能导致低效率,因为等待时间长的线程可能会一直被跳过。 - **非公平锁**不保证线程获取锁的顺序,可能导致某些线程长时间等待,但总体上提高了...

    同步读锁,异步互斥写锁源码

    4. **锁的公平性(Fairness)**:`LockDemo`可能支持公平锁和非公平锁的选择,公平锁按照请求锁的顺序分配,而非公平锁不保证这一点,可能更快但也可能导致线程饥饿。 5. **锁的可重入性(Reentrancy)**:线程在...

Global site tag (gtag.js) - Google Analytics