在Java中,非fair锁默认使用了同步和重新进入的锁,并且使用非flat锁的原因是一致的,既可以提高程序的性能。因此,为什么非fair锁可以改善性能?让我们''一起看看。
非fair锁:在每个线程中获得锁定的顺序是随机的,并且不会遵循先行的规则,任何线程都可以直接获得并在一定时间内拥有锁。
这就像雷兄弟去加油。到达加油站后,我发现有人在添加,所以我刷了汽车中的颤音。一段时间后,添加了汽车前的汽车,但雷兄弟没有注意到,也刷了汽车中的颤音。他在Lei Ge之前添加了油。这里的油枪是锁,并且没有按距离的顺序获得油枪。这是非锁定锁。
公平锁定:根据线程访谈锁定,以连接锁定的顺序获得每个线程的锁定顺序。前线始终是第一个获得锁定的螺纹。
这就像高速队列上的收费站。所有的汽车都必须排队等待通行证。第一辆车首先是通过收费站出现的。
公平锁和非Flat锁的性能测试结果如下。以下测试数据来自“ Java并发编程实际战斗”:
从以上结果可以看出,使用非平板锁(单位时间中成功获得锁的平均速率)远高于公平锁的锁。
尽管以上测试数据说明了结果,但并未表明非锁定锁的性能会更高?
获取锁时,首先将线程添加到团队的尽头等待队列和睡眠。当线程用光锁定时,它将唤醒等待团队的线程以获取锁定。在整个过程中,将从运行状态切换到休眠状态,然后从休眠状态恢复状态到操作状态。Slow,因此公平锁的执行速度将很慢。
用户模式:当该过程执行用户自己的代码时,称为用户的操作状态。内置模式:任务(过程)执行系统调用并属于内核代码时,我们说该过程处于内核操作状态。目前,处理器以最高特权内核代码执行。
假设没有内核状态和用户模式的划分,则该程序可以随意读取和编写硬件资源,例如随意阅读和写作和分配内存。在这种方式中,系统将导致系统崩溃。
通过用户模式和内核状态之间的区别,该程序将在执行某个操作时执行一系列验证和检查,然后在确认没有问题之后,它可以正常运行资源。IS,在内核状态和用户模式之间的区别之后,程序可以更安全地运行,但与此同时,两种形式的切换可以导致某些性能费用。
当线程获取锁时,您将尝试通过CAS锁定锁。如果您获得成功,您将直接有一个锁。如果您无法获得锁,则将输入等待队列,然后等待下次尝试获取锁定。这样做的优势是,您不需要遵循先到先进的规则获取锁,从而避免了线程休眠和恢复的操作,从而加速了程序的执行效率。
例如,几天前,雷(Lei)去了一个小型企业,以处理网络迁移的业务。我走了后,我发现有人以前经营业务,所以我告诉了上一个妹妹(处理业务):“让我们在门口休息,等你,等你等你要结束生意,请妹妹更好,我答应了。有空闲时间。这与等待列中的线程的线程唤醒并恢复。在此空闲时间,还有另一个旧的Li头来支付电话费。当老李支付了电话费时,我碰巧能够直接处理业务。这是一个“三分”情况。Laoli不必安排我身后的电话费,我不必等待旧的Li头来支付电话费,然后再处理机芯和效率销售人员在单位时间内处理业务。她也可以提早回家。这是一个被称为“三场获胜”。在较短的时间内执行更多任务,这是非fair锁的优势。
在本文中,我们介绍了公平锁和非挂锁和执行过程的定义。从两者的实现过程的详细信息中,可以看出,由于不需要按下(平滑),因此执行非锁定锁。没有阻塞和恢复的步骤,其性能将更高。