当前位置:首页 > 娱乐 >

锁住是什么意思网络用语(网络语锁表示什么意思啊)

来源:原点资讯(www.yd166.com)时间:2024-06-17 21:03:55作者:YD166手机阅读>>

而 Sync 是 ReentrantLock 中的内部类,Sync 继承 AbstractQueuedSynchronizer 类,AbstractQueuedSynchronizer 就是我们常说的 AQS ,它是 JUC(java.util.concurrent) 中最重要的一个类,通过它来实现独占锁和共享锁。

abstract static class Sync extends AbstractQueuedSynchronizer {...}

也就是说,我们把 fair 参数设置为 true 之后,就可以实现一个公平锁了,是这样吗?我们回到示例代码,我们可以执行一下这段代码,它的输出是顺序获取的(碍于篇幅的原因,这里就暂不贴出了),也就是说我们创建了一个公平锁

锁的非公平性

与公平性相对的就是非公平性,我们通过设置 fair 参数为 true,便实现了一个公平锁,与之相对的,我们把 fair 参数设置为 false,是不是就是非公平锁了?用事实证明一下

private ReentrantLock lock = new ReentrantLock(false);

其他代码不变,我们执行一下看看输出(部分输出)

Thread-1启动 Thread-4启动 Thread-1正在持有锁 Thread-1释放了锁 Thread-5启动 Thread-6启动 Thread-3启动 Thread-7启动 Thread-2启动

可以看到,线程的启动并没有按顺序获取,可以看出非公平锁对锁的获取是乱序的,即有一个抢占锁的过程。也就是说,我们把 fair 参数设置为 false 便实现了一个非公平锁。

ReentrantLock 基本概述

ReentrantLock 是一把可重入锁,也是一把互斥锁,它具有与 synchronized 相同的方法和监视器锁的语义,但是它比 synchronized 有更多可扩展的功能。

ReentrantLock 的可重入性是指它可以由上次成功锁定但还未解锁的线程拥有。当只有一个线程尝试加锁时,该线程调用 lock() 方法会立刻返回成功并直接获取锁。如果当前线程已经拥有这把锁,这个方法会立刻返回。可以使用 isHeldByCurrentThread 和 getHoldCount 进行检查。

这个类的构造函数接受可选择的 fairness 参数,当 fairness 设置为 true 时,在多线程争夺尝试加锁时,锁倾向于对等待时间最长的线程访问,这也是公平性的一种体现。否则,锁不能保证每个线程的访问顺序,也就是非公平锁。与使用默认设置的程序相比,使用许多线程访问的公平锁的程序可能会显示较低的总体吞吐量(即较慢;通常要慢得多)。但是获取锁并保证线程不会饥饿的次数比较小。无论如何请注意:锁的公平性不能保证线程调度的公平性。因此,使用公平锁的多线程之一可能会连续多次获得它,而其他活动线程没有进行且当前未持有该锁。这也是互斥性 的一种体现。

也要注意的 tryLock() 方法不支持公平性。如果锁是可以获取的,那么即使其他线程等待,它仍然能够返回成功。

推荐使用下面的代码来进行加锁和解锁

class MyFairLock { private final ReentrantLock lock = new ReentrantLock(); public void m() { lock.lock(); try { // ... } finally { lock.unlock() } } }

ReentrantLock 锁通过同一线程最多支持2147483647个递归锁。 尝试超过此限制会导致锁定方法引发错误。

ReentrantLock 如何实现锁公平性

我们在上面的简述中提到,ReentrantLock 是可以实现锁的公平性的,那么原理是什么呢?下面我们通过其源码来了解一下 ReentrantLock 是如何实现锁的公平性的

跟踪其源码发现,调用 Lock.lock() 方法其实是调用了 sync 的内部的方法

abstract void lock();

而 sync 是最基础的同步控制 Lock 的类,它有公平锁和非公平锁的实现。它继承 AbstractQueuedSynchronizer 即 使用 AQS 状态代表锁持有的数量。

lock 是抽象方法是需要被子类实现的,而继承了 AQS 的类主要有

锁住是什么意思网络用语,网络语锁表示什么意思啊(21)

我们可以看到,所有实现了 AQS 的类都位于 JUC 包下,主要有五类:ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch 和 ThreadPoolExecutor,其中 ReentrantLock、ReentrantReadWriteLock、Semaphore 都可以实现公平锁和非公平锁。

下面是公平锁 FairSync 的继承关系

锁住是什么意思网络用语,网络语锁表示什么意思啊(22)

非公平锁的NonFairSync 的继承关系

锁住是什么意思网络用语,网络语锁表示什么意思啊(23)

由继承图可以看到,两个类的继承关系都是相同的,我们从源码发现,公平锁和非公平锁的实现就是下面这段代码的区别(下一篇文章我们会从原理角度分析一下公平锁和非公平锁的实现)

锁住是什么意思网络用语,网络语锁表示什么意思啊(24)

栏目热文

锁了网络用语什么意思(锁网络用语什么意思)

锁了网络用语什么意思(锁网络用语什么意思)

看到网络上有一个不好的风向,特别是一些大V、学者张口闭口“U型锁”,“二极管”来暗讽网友,且不说他在针对谁,但是总觉得这...

2024-06-17 21:01:54查看全文 >>

开锁网络用语(网上说开锁的梗)

开锁网络用语(网上说开锁的梗)

解锁科技热词科普流行用语14个网络热词新鲜出炉一起来看!科技热词网络流行语来源:网信广东、网络传播杂志,...

2024-06-17 21:39:02查看全文 >>

什么是锁(什么是锁含义)

什么是锁(什么是锁含义)

古老的智慧和玄机——“锁”孟祥瑞 中国锁具文化从距今5000多年前的仰韶文化时期,我国先民创造了装在木结构框架建筑上的木...

2024-06-17 21:01:38查看全文 >>

锁了是什么意思网络用语(网络语锁表示什么意思啊)

锁了是什么意思网络用语(网络语锁表示什么意思啊)

锁了是什么梗?“锁了”是一个网络用语,最近很多的小伙伴们都不太清楚是什么意思,不过经常的看到有人说锁了,谁和谁锁了,这对...

2024-06-17 21:10:43查看全文 >>

门被锁了怎么办没钥匙怎么打开(门被钥匙锁了怎么在里面打开)

门被锁了怎么办没钥匙怎么打开(门被钥匙锁了怎么在里面打开)

学会这招,即使钥匙忘在家里把门关了,也不请开锁公司了!大家好,我是雷哥教电脑,这期视频我跟大家分享一下:钥匙忘在家里,门...

2024-06-17 21:09:57查看全文 >>

锁什么意思网络词(我被锁了什么意思网络用语)

锁什么意思网络词(我被锁了什么意思网络用语)

今天这个单词与你已知的一个旧词——lock,锁,有关。lock这个单词既可以当动词,又可以当名词,今天的新词是——rel...

2024-06-17 21:30:48查看全文 >>

优秀推文范例100字(优秀推文模板素材)

优秀推文范例100字(优秀推文模板素材)

我曾有段初恋在菜市场开始,那时他是陪伴母亲购买食材的优等生,我则是以回收废品为生的小姑娘。为了这段感情,我默默地追求了他...

2024-06-17 21:43:03查看全文 >>

推文是什么社交软件(推文和媒体在哪个社交软件上有)

推文是什么社交软件(推文和媒体在哪个社交软件上有)

小说推文是指通过社交媒体、论坛、博客等平台推广小说,以吸引更多读者关注和阅读。作为小白,你可以遵循以下建议来推广小说:1...

2024-06-17 21:45:06查看全文 >>

推文文案怎么写范例(推文文案开头套用模板)

推文文案怎么写范例(推文文案开头套用模板)

云天收夏色,木叶动秋声。哈喽小伙伴们大家好啊,本周日就是立秋了,作为二十四节气中第十三个节气,秋季的第一个节气,他的到来...

2024-06-17 21:03:36查看全文 >>

推文范文(新手怎么写推文)

推文范文(新手怎么写推文)

文|星晖编|陈梅希‍‍推文号正在占领互联网。在微博,它们化身黑话加密的投稿bot;在小红书,它们成了标题耸人听闻的图文笔...

2024-06-17 21:21:37查看全文 >>

文档排行