锁(面试题)

非公平锁和公平锁在ReentrantLock中的实现

如果一个锁是公平的,那么这个锁的获取顺序就应该符合请求的绝对时间顺序,FIFO。
对于非公平锁,只要CAS设置同步状态成功,则表示当前线程获取了锁,而公平锁还需要判断当前节点是否有前驱节点,如果有,则表示有线程比当前线程更早请求获取锁,因此还需要等待前驱线程获取释放锁之后才能继续获取锁。


讲一下sync 可重入如何实现

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


ReentrantLock都是如何实现重入的

内部定义了一个同步器 sync,加锁的时候通过CAS算法,并将线程对象放到一个双向链表中,每次获取锁的时候,看下当前维护的那个线程ID是否与当前请求的线程ID是否一样,一样则重入


Sync与Lock的区别

  1. sync是关键字,Lock是一个接口
  2. sync会自动的释放锁,而Lock必须手动进行释放,并且必须在finally中进行释放
  3. sync 是不可中断的,Lock可以中断也可以不中断
  4. 通过Lock可以知道线程是否获取了锁,而sync不能
  5. sync可以锁住代码块和方法 ,Lock只能锁住代码块
  6. Lock可以使用读锁提高多线程的读的效率
  7. sync 是非公平锁,ReentrantLock实现Lock 可以控制是公平锁还是非公平锁
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当面试中涉及到ZooKeeper分布式的问题,通常会涉及以下几个方面: 1. 什么是ZooKeeper分布式? ZooKeeper分布式是基于ZooKeeper提供的原语实现的一种分布式机制。它利用了ZooKeeper的有序临时节点和Watcher机制来实现的竞争和释放。 2. ZooKeeper分布式的实现原理是什么? ZooKeeper分布式的实现原理主要依赖于ZooKeeper的有序临时节点和Watcher机制。当一个线程需要获取时,它会在ZooKeeper的指定路径上创建一个有序临时节点,并且注册一个Watcher来监听前一个节点是否存在。如果前一个节点不存在,则该线程获取成功;否则,该线程需要等待前一个节点被删除后继续竞争。 3. ZooKeeper分布式存在的问题有哪些? ZooKeeper分布式虽然实现了基本的机制,但仍然存在以下问题: - 网络延迟:由于网络延迟等原因,可能导致的竞争时间增加,影响系统的性能。 - 节点故障:如果持有的节点发生故障,可能导致其他节点无法获取或长时间等待。 - 死:如果在获取的过程中发生故障或异常,可能导致死情况的发生。 4. 如何解决ZooKeeper分布式的问题? 为了解决ZooKeeper分布式存在的问题,可以采取以下策略: - 设置合理的超时时间,避免长时间等待导致系统性能下降。 - 使用心跳机制来检测节点的存活状态,及时处理节点故障。 - 采用分布式协调框架或工具,如Curator、Spring Integration等,简化分布式的使用和管理。 这些是一些常见的ZooKeeper分布式面试题及其答案,希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值