美文网首页
如何动手写一个锁Lock

如何动手写一个锁Lock

作者: LZhan | 来源:发表于2019-12-27 15:13 被阅读0次

    彤哥说源码-死磕 java同步系列之自己动手写一个锁Lock

    整体思路:最重要的是需要标识对象当前是已加锁状态还是未加锁状态。
    所以可以设定一个变量,当其为1时说明已加锁,为0时说明未加锁,
    但是对于这个变量,所线程的环境下,同一时刻只能有一个线程将它修改,并且为1时其他线程就不可以修改了,这就是典型的cas操作,所以我们需要使用Unsafe这个类来做CAS操作。
    然后,我们知道在多线程的环境下,多个线程对同一个锁的争用肯定只有一个能成功,那么,其它的线程就要排队,所以我们还需要一个队列。
    最后,这些线程排队的时候干嘛呢?它们不能再继续执行自己的程序,那就只能阻塞了,阻塞完了当轮到这个线程的时候还要唤醒,所以我们还需要Unsfae这个类来阻塞(park)和唤醒(unpark)线程。

    基于以上四点,我们需要的神器大致有:一个变量、一个队列、执行CAS/park/unpark的Unsafe类。

    相关文章

      网友评论

          本文标题:如何动手写一个锁Lock

          本文链接:https://www.haomeiwen.com/subject/dbjdoctx.html