Java:锁

简述一下Synchronize和Lock的区别
Lock能完成Synchronize的所有功能
Lock有精准的语法和性能,Synchronize会自动释放锁,而lock需要手工释放,必须在finally中释放。
如果确保N个线程访问N个资源,但是又不导致死锁
可以指定获取锁的顺序,所有县城都以同样的顺序获取锁和释放锁。
什么是死锁
两个以上线程都在等待对方执行。陷入了无限等待。
说明一下锁和同步的关系
Synchronize可以加在方法上,也可以加在代码块上。
Lock需要制定起始位置和终止位置。
Synchronize是交给JVM执行,而lock是通过代码实现
性能方面:竞争很激烈的情况下Synchronize的性能下降非常快。而Lock则基本不变。
自动解锁和人工解锁也有区别。
说明一下Synchronize可重入怎么实现的
每个锁关联一个线程持有者和一个计数器。计数器为0则释放锁,当一个线程请求成功后,JVM会记下持有锁的进程,计数器加1,其他线程等待。线程退出时,计数器减少。

公平锁和非公平锁
公平锁:锁的顺序根据指定顺序获取。公平锁需要判断当前节点的前驱节点有没有,如果有,还需要等待前驱线程释放锁
非公平锁:只要谁知同步状态成功就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值