什么是java非公平锁

技术什么是java非公平锁这篇文章主要介绍“什么是java非公平锁”,在日常操作中,相信很多人在什么是java非公平锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是java非公平锁”

本文主要介绍“什么是java不公平锁”。在日常操作中,相信很多人都对什么是java不公平锁有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“什么是java不公平锁”的疑惑!接下来,请和边肖一起学习!

1.不公平的锁不能保证锁是按照请求锁的顺序获得的。这可能会导致一个或一些线程永远得不到锁。

2.CPU唤醒线程的成本可以降低,整体吞吐效率会很高。但是,可能会有线程长时间甚至永远得不到锁,从而导致饥饿。

实例

/**

* Syncobjectfornon-fair lock

*/

staticfinalclasofairsyncextendssync {

privatedstationfinalloseriveversiuid=7316153563782823691 l;

/**

*执行扫描。尝试立即插入,恢复正常

*acquireonfailure。

*/

final void lock(){ 0

if(compareAndSetState(0,1))

setExclusiveOwnerThread(thread . currentthread());

其他

获得(1);

}

protected innalbooleantryacquire(intacquires){ 0

returnnonfairTryAcquire(获取);

}

}

/**

* Syncobjectforfairlocks

*/

staticfinaclassfairsynextendssync {

privatedstationfinalloseriveversiuid=nbsp

;-3000897897090466540L;
 
        final void lock() {
            acquire(1);
        }
 
        /**
         * Fair version of tryAcquire.  Don't grant access unless
         * recursive call or no waiters or is first.
         */
        protected final boolean tryAcquire(int acquires) {
            final Thread current = Thread.currentThread();
            int c = getState();
            if (c == 0) {
                if (!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;
        }
    }

到此,关于“什么是java非公平锁”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/38079.html

(0)

相关推荐

  • Mybatis与spring-data-jpa获取insert之后的自增长id是什么

    技术Mybatis与spring-data-jpa获取insert之后的自增长id是什么本篇文章为大家展示了Mybatis与spring-data-jpa获取insert之后的自增长id是什么,内容简明扼要并且容易理解,

    攻略 2021年10月21日
  • 英文日期写法,英语的日期有哪几种写法

    技术英文日期写法,英语的日期有哪几种写法英文日期分英式和美式,如下:1) 8th March,2004 或8 March,2004(英式)2) March 8th,2004 或March 8,2004 (美式)
    日期写法

    生活 2021年10月22日
  • 非极性分子,极性分子和非极性分子有哪些

    技术非极性分子,极性分子和非极性分子有哪些分子的极性(永久烷极)是由其中正、负电荷的“重心”是否重合所引起的。根据其分子在空间是否绝对对称来判定极性非极性分子,化学键极性的向量和——弱极矩μ则是其极性大小的客观标度.甲苯

    生活 2021年10月23日
  • BurpSuite与Xray联动扫描

    技术BurpSuite与Xray联动扫描 BurpSuite与Xray联动扫描Xray是长亭科技推出的,最经典的莫过于代理模式下的被动扫描,它使得整个过程可控且更加精细化;代理模式下的基本架构为,扫描器

    礼包 2021年10月28日
  • go module是如何使用本地包的

    技术go module是如何使用本地包的小编给大家分享一下go module是如何使用本地包的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!g

    攻略 2021年11月27日
  • mysql如何解决幻读(mysql2003错误如何解决)

    技术mysql 5.7如何解决忘记密码问题小编给大家分享一下mysql 5.7如何解决忘记密码问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! mysql5.7忘记密码的解

    攻略 2021年12月16日