ConcurrentLinkedQueue_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > ConcurrentLinkedQueue

ConcurrentLinkedQueue

 2014/10/21 12:29:01  spring5365  程序员俱乐部  我要评论(0)
  • 摘要:/**在队列尾部插入节点**/publicbooleanoffer(Ee){if(e==null)thrownewNullPointerException();Node<E>n=newNode<E>(e,null);for(;;){Node<E>t=tail;Node<E>s=t.getNext();if(t==tail){if(s==null){//s为null时,将n设置为t的下一个节点if(t.casNext(s,n)){casTail(t
  • 标签:
class="java" name="code">/**
 在队列尾部插入节点
 **/    
public boolean offer(E e) {
        if (e == null) throw new NullPointerException();
        Node<E> n = new Node<E>(e, null);
        for (;;) {
            Node<E> t = tail;
            Node<E> s = t.getNext();
            if (t == tail) {
                if (s == null) {
                    //s为null时,将n设置为t的下一个节点
                    if (t.casNext(s, n)) {
                        casTail(t, n);
                        return true;
                    }
                } else {
                    //将s设置成尾结点
                    casTail(t, s);
                }
            }
        }
    }

1获取尾结点和尾结点的下一结点

2.如t是尾结点,执行3。否则执行1

3如果s(尾结点的下一结点)为null,执行4。否则执行5

4.如果设置尾结点的下一个结点成功,设置n为尾结点(如果这里设置不成功,其它线程会在5处设置尾结点),返回true。

5.设置t的下一个结点为尾结点

  • 相关文章
发表评论
用户名: 匿名