加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Lock特点性能完美分析解读

发布时间:2021-05-26 10:12:05 所属栏目:编程 来源:互联网
导读:可重入 像synchronized和ReentrantLock都是可重入锁,可重入性表白了锁的分派机制是基于线程的分派,而不是基于要领挪用的分派。 举个简朴的例子,当一个线程已

像synchronized和ReentrantLock都是可重入锁,可重入性表白了锁的分派机制是基于线程的分派,而不是基于要领挪用的分派。

举个简朴的例子,当一个线程已经获取到锁,当后续再获取统一个锁,直接获取乐成。但获取锁和开释锁必必要成对呈现。

可相应间断

当线程由于获取锁而进入阻塞状态,外部是可以间断该线程的,挪用方通过捕捉InterruptedException可以捕捉间断

可配置超时时刻

获取锁时,可以指定超时时刻,可以通过返回值来判定是否乐成获取锁

公正性

提供公正性锁和非公正锁(默认)两种选择。

 公正锁,线程将凭证他们发出哀求的次序来获取锁,不应承插队;

 非公正锁,则应承插队:当一个线程产生获取锁的哀求的时候,假如这个锁是可用的,那这个线程将跳过地址行列里守候线程并得到锁。

思量这么一种环境:A线程持有锁,B线程哀求这个锁,因此B线程被挂起;A线程开释这个锁时,B线程将被叫醒,因此再次实行获取锁;与此同时,C线程也哀求获取这个锁,那么C线程很也许在B线程被完全叫醒之前得到、行使以及开释这个锁。

这是种双赢的排场,B获取锁的时候(B被叫醒后才气获取锁)并没有推迟,C更早地获取了锁,而且吞吐量也得到了进步。在大大都环境下,非公正锁的机能要高于公正锁的机能。

其它,这个公正性是针对线程而言的,不能依靠此来实现营业上的公正性,应该由开拓者本身节制,好比通过FIFO行列来担保发布。

读写锁

应承读锁和写锁疏散,读锁与写锁互斥,可是多个读锁可以共存,合用于读频次宏大于写频次的场景

富厚的API

提供了多个要领来获取锁相干的信息,可以辅佐开拓者监控和排盘查题

 isFair():判定锁是否是公正锁

 isLocked():判定锁是否被任何线程获取了

 isHeldByCurrentThread():判定锁是否被当前列程获取了

 hasQueuedThreads():判定是否有线程在守候该锁

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读