java关于锁、JDK、反射问题整理总结

1.讲一下 synchronized,可重入怎么实现?

每个锁关联一个线程持有者和一个计数器。当计数器为 0 时表示该锁没有被任何线程持有, 那么任何线程都都可能获得该锁而调用相应方法。当一个线程请求成功后,JVM 会记下持有锁的线程,并将计数器计为 1。此时其他线程请求该锁,则必须等待。而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增。当线程退出一个 synchronized 方法/ 块时,计数器会递减,如果计数器为 0 则释放该锁。

2.锁和同步的区别。

用法上的不同:
synchronized 既可以加在方法上,也可以加载特定代码块上,而 lock 需要显示指定起始位置和终止位置。 synchronized 是托管给 JVM 执行的,lock 的锁定是通过代码实现的,它有比 synchronized 更精确的线程语义。
性能上的不同: lock 接口的实现类 ReentrantLock,不仅具有和 synchronized 相同的并发性和内存语义, 还多了超时的获取锁、定时锁、等候和中断锁等。 在竞争不是很激烈的情况下,synchronized 的性能优于 ReentrantLock,竞争激烈的情况下 synchronized 的性能会下降的非常快,而 ReentrantLock 则基本不变。
锁机制不同: synchronized 获取锁和释放锁的方式都是在块结构中,当获取多个锁时,必须以相反的顺序释放,并且是自动解锁。而 Lock 则需要开发人员手动释放,并且必

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值