原文链接https://blog.csdn.net/qq_34288630/article/details/102404004
一、可重入性
1、什么是可重入性
指的是同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁
不可重入:举例:我在北京汽车摇号
我:线程 摇到号:获得锁
我摇到一次号只能获取一次上牌照的机会。这叫做不可重入性
2、好处
避免死锁、提升封装性
如何避免死锁:假设两个方法都被synchronized修饰,方法1中调用方法2 由于方法2也被synchronized修饰,也需要获得这把锁。假设他是不可重入性,执行方法2 就必须一直等待方法1完成,但是方法1中是调用了方法2,所以会处于一直等待,最后导致死锁。
所以可重入性 就避免了死锁
3、粒度
指的是一个范围,线程而非调用
(用三种情况说明和pthread的区别)
粒度在同一线程范围内
情况一:证明同一个方法是可重入的
情况二:证明可重入不要求是同一个方法
情况三:证明可重入不要求是同一个类中
二、不可中断
1、什么是不可中断
一旦这个锁被别人获得了,如果我还想获得,我只能选择等待或者阻塞,直到别的线程释放这个锁,如果别人永远不释放锁,那么我只能永远等下去
相比之下,Lock类,可以拥有中断的能力,第一点,如果我觉的我等的时间太长了,有权中断现在已经获取到锁的线程的执行,第二点,如果我觉的我等待的时间太长了不想等了,也可以退出
Synchronized性质(可重入性 和 不可中断)
最新推荐文章于 2022-07-31 23:43:35 发布