| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 关于ReentranLock -> 正文阅读 |
|
[Java知识库]关于ReentranLock |
相对于synchronized,它具备如下特点
与synchronized一样,都支持可重入 基本用法
可重入可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁,如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住。 可打断注意:需要使用lock.lockInterruptibly();用lock.lock是无法打断的 锁超时?使用tryLock方法,返回的是boolean值,没有线程竞争的情况下:如图 下图是tryLock(time,timeUtil)? 可以为tryLock设置参数,即尝试获取多长时间,如果那段时间内没有获取到锁,就放弃等待。 同时,也支持被打断 ?用ReentranLock解决哲学家就餐问题哲学家就餐问题发生死锁的原因是,每个人都持有一个资源,都在等待别人释放资源,相互等待。 根源在于synchronized关键字如果拿不到锁就要一直等待 ?尝试改写代码,先让筷子类继承ReentranLock类,并改写run()方法 重点在于,如果我获取right筷子失败了,我就在finally中释放右手的筷子? ?公平性synchronized锁是不公平的锁,线程没有抢到锁的时候就会进入阻塞队列等待,当线程释放锁的时候,所有在阻塞队列中的锁会一起争抢,而不是按照先来后到。 ReentranLock默认也是不公平锁 如果传入参数为true的时候,就采取公平锁,不填或false就采取非公平锁,公平锁实质上是为了解决饥饿问题,但没有必要,tryLock更好。 条件变量synchronized中也有条件变量,就是waitSet休息室,当条件不满足时进入waitSet等待 ReentranLock的条件变量比synchronized强大之处在于,它是支持多个条件变量的,这就好比
?
? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:49:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |