跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • AQS 源码里,为什么 head 和 tail 是个成员变量而不是静态变量啊
未分類
19 5 月 2020

AQS 源码里,为什么 head 和 tail 是个成员变量而不是静态变量啊

AQS 源码里,为什么 head 和 tail 是个成员变量而不是静态变量啊

資深大佬 : amiwrong123 0

现在源码也没看完,但这点感觉好难理解啊。

    /**      * Head of the wait queue, lazily initialized.  Except for      * initialization, it is modified only via method setHead.  Note:      * If head exists, its waitStatus is guaranteed not to be      * CANCELLED.      */     private transient volatile Node head;      /**      * Tail of the wait queue, lazily initialized.  Modified only via      * method enq to add new wait node.      */     private transient volatile Node tail; 

现在知道 CHL 队列 是一个 Node 的双向链表,而好多操作里面都需要获得 head/tail 成员(即每个 Node 都是知道,队列的 head 和 tail 是哪个 Node ),那这岂不是要时刻保持 双向链表里每个 Node 的 head 和 tail 都是正确的。

那把 head 和 tail 设置为静态变量,岂不是方便了很多。反正同时只有一个 Node 是 head 嘛

大佬有話說 (4)

  • 資深大佬 : adguy

    现在知道 CHL 队列 是一个 Node 的双向链表,而好多操作里面都需要获得 head/tail 成员(即每个 Node 都是知道,队列的 head 和 tail 是哪个 Node )
    你的话到这里 都没毛病,

    那这岂不是要时刻保持 双向链表里每个 Node 的 head 和 tail 都是正确的。

    这一句也没毛病,但是 volatile 已经保证了每次获取到的都是最新的。

    那把 head 和 tail 设置为静态变量,岂不是方便了很多。反正同时只有一个 Node 是 head 嘛

    这有啥方不方便的呢?静态变量是为了不初始化类就能获取到,但是对于锁来说没必要,肯定是初始化锁了才会在内部调用头结点和尾节点。

    你这个问题挺无厘头的。。。。。。,乍一看有点蒙

  • 資深大佬 : gexyuzz

    你是想实现全局锁吗

  • 資深大佬 : freebird1994

    用面向对象的角度是不是好理解些,每个锁持有一个队列,队列有头尾,与锁对象关联。而不是与这个类关联

  • 主 資深大佬 : amiwrong123

    @adguy
    @freebird1994
    @gexyuzz
    好吧,我发现我看错源码了,问了个 sb 的问题。此帖沉了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具