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

Java中锁定有哪些常用的知识点?

发布时间:2023-04-24 14:30:19 所属栏目:教程 来源:
导读:如果锁具备可重入性,则称为可重入锁。像synchronized和reentrantlock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个s
如果锁具备可重入性,则称为可重入锁。像synchronized和reentrantlock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行方法method2。

在Java中,synchronized就不是可中断锁,而Lock是可中断锁(lock.lockInterruptibly())。

如果某一线程A正在执行锁中的代码,另一线程B正在等待获取该锁,可能由于等待时间过长,线程B不想等待了,想先处理其他事情,我们可以让它中断自己或者在别的线程中中断它,这种就是可中断锁。

在前面演示lockInterruptibly()的用法时已经体现了Lock的可中断性。

公平锁即尽量以请求锁的顺序来获取锁。比如是有多个线程在等待一个锁,当这个锁被释放时,等待时间最久的线程(最先请求的线程)会获得该锁,这种就是公平锁。

非公平锁即无法保证锁的获取是按照请求锁的顺序进行的。这样就不仅仅是可能导致某个或者另外一些任何其他线程永远连续不断地获取不到任何一个锁。

在Java中,synchronized就是非公平锁,它甚至无法保证每个等待的线程正确地获取数据库锁的顺序。

而对于reentrantlock和reentrantreadwritelock,虽然默认情况下使用的是非公平格式的锁,但是可以自定义地设置为一个公平格式的锁。

(编辑:汽车网)

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

    推荐文章