面试题之手写lock锁

面试题之手写lock锁

1、首先创建一个类、随便叫啥名,实现一下lock,大概有这么几个接口需要实现

2、上篇文章我们总结了几个重要点,这里在回顾下

    (1) 调用lock方法加锁

    (2) 通过cas加锁

    (3)加锁成功设置拥有者为当前线程

    (4) 加锁失败,加入等待队列,线程休眠

    (5) 调用unlock方法解锁,释放锁之后唤醒队列线程

最主要实现lock(),tryLock(),unlock()方法

3、首先我们需要设置拥有者线程,我们用原子类(AtomicReference)来保证线程安全

4、建立一个阻塞队列(LinkedBlockingQueue),将加锁失败的线程,添加入队列

5、TryLock方法

通过cas进行加锁,如果cas成功则返回true,如果失败则返回false

6、lock方法

调用tryLock方法加锁,如果加锁失败,将线程加入wait队列,进行线程休眠(park),被唤醒后把当前线程从队列移除

7、unlock方法

通过cas方法释放锁,释放锁成功唤醒(unpark)队列中的线程

8、运行试一下效果

将ReentrantLock替换成自己写的HandwritingLock,运行一下看看效果,案例看上一篇文章

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容