Synchronized性质(可重入性 和 不可中断)

本文深入探讨了可重入性概念,解释了它如何帮助避免死锁并提升代码封装性,并对比了不可中断特性,阐述了在多线程环境下这两种特性的关键作用。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值