首页 > 其他分享 >软件定制开发按需定价,如有需要可联系客服进行咨询

软件定制开发按需定价,如有需要可联系客服进行咨询

时间:2024-10-26 09:09:04浏览次数:1  
标签:return int 客服 current 线程 公平 软件 定制 acquires

软件定制开发按需定价,如有需要可联系客服进行咨询

公平锁和非公平锁

公平锁:多个线程按照申请锁的顺序来获取锁

公平锁的优点是等待锁的线程不会饿死。缺点是整体吞吐效率相对非公平锁要低,等待队列中除第一个线程以外的所有线程都会阻塞,CPU唤醒阻塞线程的开销比非公平锁大。

非公平锁:多个线程加锁时直接尝试获取锁,获取不到才会到等待队列的队尾等待。但如果此时锁刚好可用,那么这个线程可以无需阻塞直接获取到锁,所以非公平锁有可能出现后申请锁的线程先获取锁的场景。

非公平锁的优点是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得锁,CPU不必唤醒所有线程。缺点是处于等待队列中的线程可能会饿死,或者等很久才会获得锁。

在JAVA中,ReentrantLock可通过构造函数至指定是否是公平锁,默认是非公平锁

//********************* 公平锁加锁 ***********************
protected final boolean tryAcquire(int acquires) {
    final Thread current = Thread.currentThread();
    int c = getState();
    if (c == 0) {
        if (!hasQueuedPredecessors() && //区别在这,!hasQueuedPredecessors()
            compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(current);
            return true;
        }
    }
    else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0)
            throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
    }
    return false;
}

//********************* 非公平锁加锁 ***********************
final boolean nonfairTryAcquire(int acquires) {
    final Thread current = Thread.currentThread();
    int c = getState();
    if (c == 0) {
        if (compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(current);
            return true;
        }
    }
    else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0) // overflow
            throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
    }
    return false;
}

通过上面的源代码对比,可以明显的看出公平锁与非公平锁的lock()方法唯一的区别就在于公平锁在获取同步状态时多了一个限制条件:hasQueuedPredecessors()。这个方法主要是判断当前线程是否位于同步队列中的第一个。如果是则返回true,否则返回false。也就是说公平锁按照队列等待顺序来加锁的

public final boolean hasQueuedPredecessors() {
    Node t = tail; // Read fields in reverse initialization order
    Node h = head;
    Node s;
    return h != t &&
        ((s = h.next) == null || s.thread != Thread.currentThread());
}

synchronized默认是非公平锁并且不能变为公平锁

以上就是

软件定制开发按需定价,如有需要可联系客服进行咨询, 更多内容欢迎关注之后的文章

标签:return,int,客服,current,线程,公平,软件,定制,acquires
From: https://www.cnblogs.com/yunbaomengnan/p/18503629

相关文章

  • 将软件集成到 Windows 映像中并进行静默安装,可以使用 DISM 和适当的安装程序命令。下
    将软件集成到Windows映像中并进行静默安装,可以使用DISM和适当的安装程序命令。下面是具体的步骤和示例命令。1.准备工作确保你有一个已挂载的Windows映像。确保你有软件的安装程序,并且支持静默安装。2.挂载映像首先,挂载你的WIM文件(如果还没有挂载的话):bashCopyC......
  • Awesome Tools,程序员常用高效实用工具、软件资源精选,办公效率提升利器!
    ✨前言在当今这个技术日新月异的时代,开发者只有持续学习,才能紧跟时代的浪潮。为了助力开发者在高效学习与工作中实现平衡(告别996的束缚),众多卓越且实用的开发工具应运而生,它们如同强大的助力器,极大地提升了我们的工作效率与创造力。GtiHub开源地址(欢迎关注持续更新):https://......
  • dremio 25.2 软件包以及github 源码更新了
    昨天我说了dremio发布了25.2提供了新的catalog支持,之后过了一段时间dremio同时也提供了软件包以及github源码的更新说明25.1版本构建关于dremio-js的私服问题在这次代码中也看到解决了,新功能代码可以看看参考资料https://github.com/dremio/dremio-oss/blob/master/ui/......
  • 【2024潇湘夜雨】WIN 11_IoT_Ent_LTSC_2024_24H2.26100.2161软件选装纯净特别版10.26
    【系统简介】=============================================================1.本次更新母盘来自WIN11_IoT_Ent_LTSC_2024_24H2.26100.2161.进桌面后稍等片刻,等待后续部分优化完成。2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也......
  • 软件开发与测试模型
    软件开发模型软件开发生命周期模型是软件产品从最初构思到退役的过程。常见的软件开发模型大爆炸模型直接开发(有想法直接编程无计划性)。边写边改模型变对需求进行分析边对软件进行编程。先简单的设计来回编程来回测试来回修改直至觉得足够才发布产品。无计划与文档可......
  • 打造知识绿洲:盘点十款搭建知识库软件,助力企业成长
    在当今瞬息万变的商业环境中,知识的有效管理与分享已成为企业持续发展和创新的关键。构建一座企业内部的知识绿洲,不仅能够提升员工的工作效率,还能促进团队协作,增强企业的竞争力。为此,本文精选了十款功能强大、易于使用的知识库软件,其中包括备受瞩目的HelpLookAI知识库,旨在助......
  • 盘点十款搭建知识库软件,助力企业成长
    在当今瞬息万变的商业环境中,知识的有效管理与分享已成为企业持续发展和创新的关键。构建一座企业内部的知识绿洲,不仅能够提升员工的工作效率,还能促进团队协作,增强企业的竞争力。为此,本文精选了十款功能强大、易于使用的知识库软件,其中包括备受瞩目的HelpLookAI知识库,旨在助......
  • 【软考中级笔记】软件设计师易混知识点归纳
    一、计算机系统1.1计算机硬件1.2计算机软件1.软件可靠性、可维护性、可用性计算软件可靠性指标公式可靠性:MTTF/(1+MTTF)可用性:MTBF/(1+MTBF)可维护性:1/(1+MTTR)MTTF(MeanTimeToFailure)平均无故障时间MTTF=∑T1/NMTTR(Meantimetorepair)平均修复时间MTTR=∑(T......
  • 苹果手机数据恢复软件免费版Top10,快来看看哪个适合你(2024)
    尽管苹果手机配备了多种数据保护措施,但由于意外情况或病毒攻击,“不可逆转”的数据丢失仍有可能发生。在这种情况下,最有效的解决方案是使用苹果手机数据恢复软件,这种工具能利用先进算法直接从设备或备份中提取丢失的文件。市场上有众多iphone数据恢复软件,很多表现优异,但也有不少......
  • Maya 3D建模软件-3dgraphics.dll报错:从根源解决,恢复流畅创作
    Maya,作为Autodesk旗下的一款顶级3D建模、动画和渲染软件,广泛应用于影视特效、游戏开发、广告制作等多个领域。然而,在使用过程中,用户可能会遇到-3dgraphics.dll报错的问题,这不仅会打断工作流程,还可能影响项目的进度和质量。本文将从报错原因、解决方案以及预防措施三个方面,深入......