`
zhaoxjmail
  • 浏览: 6376 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 实现LockFreeQueue

    博客分类:
  • Java
阅读更多

import java.util.concurrent.atomic.AtomicReference;

public class LockFreeQueue<T> {
  private AtomicReference<Node> head;
  private AtomicReference<Node> tail;


  /**
   * Create a new object of this class.
   */
  public LockFreeQueue() {
    Node sentinel = new Node(null);
    head = new AtomicReference<Node>(sentinel);
    tail = new AtomicReference<Node>(sentinel);
  }
  /**
   * Enqueue an item.
   * @param value Item to enqueue.
   */
  public void enq(T value) {
    // try to allocate new node from local pool
    Node node = new Node(value);
    while (true) {               // keep trying
      Node last = tail.get();    // read tail
      Node next = last.next.get(); // read next
      // are they consistent?
      if (last == tail.get()) {
        if (next == null) {     // was tail the last node?
          // try to link node to end of list
          if (last.next.compareAndSet(next, node) {
            // enq done, try to advance tail
            tail.compareAndSet(last, node);
            return;
          }
        } else {                // tail was not the last node
          // try to swing tail to next node
          tail.compareAndSet(last, next);
        }
      }
    }
  }
  /**
   * Dequeue an item.
   * @throws queue.EmptyException The queue is empty.
   * @return Item at the head of the queue.
   */
  public T deq() throws EmptyException {
    while (true) {
      Node first = head.get();
      Node last = tail.get();
      Node next = first.next.get();
      // are they consistent?
      if (first == head.get()) {
        if (first == last) {    // is queue empty or tail falling behind?
          if (next == null) {   // is queue empty?
            throw new EmptyException();
          }
          // tail is behind, try to advance
          tail.compareAndSet(last, next);
        } else {
          T value = next.value; // read value before dequeuing
          if (head.compareAndSet(first, next)) {
            return value;
          }
        }
      }
    }
  }
  /**
   * Items are kept in a list of nodes.
   */
  public class Node {
    /**
     * Item kept by this node.
     */
    public T value;
    /**
     * Next node in the queue.
     */
    public AtomicReference<Node> next;


    /**
     * Create a new node.
     */
    public Node(T value) {
      this.next  = new AtomicReference<Node>(null);
      this.value = value;
    }
  }

分享到:
评论

相关推荐

    java实现流媒体播放

    Java 实现流媒体播放是一个涉及网络传输、多媒体处理和实时数据传输的重要技术。在这个大作业中,我们将探讨如何使用Java来构建一个能够接收并播放流媒体的系统。流媒体技术的核心在于将连续的音频或视频数据分割成...

    java 实现 word 文档的在线预览

    在Java开发中,实现Word文档的在线预览是一项常见的需求,尤其在企业级应用中,例如文档管理系统或者协同办公平台。这项功能可以让用户无需下载原始文件就能查看文档内容,提高工作效率并减少服务器存储压力。本资源...

    Java实现生命游戏.zip

    Java实现生命游戏Java实现生命游戏Java实现生命游戏 Java实现生命游戏Java实现生命游戏Java实现生命游戏 Java实现生命游戏Java实现生命游戏Java实现生命游戏 Java实现生命游戏Java实现生命游戏Java实现生命游戏 Java...

    java实现流量控制流量控制

    Java作为一种广泛使用的编程语言,同样提供了多种方法来实现流量控制。本篇文章将深入探讨Java如何实现流量控制,并结合具体实例来阐述相关知识点。 首先,我们要理解流量控制的基本原理。在TCP(传输控制协议)中...

    kerberos的java实现

    Java语言实现的Kerberos允许开发者在Java应用中集成这种强大的安全机制。 **Java与Kerberos的结合** Java中的Kerberos支持主要体现在Java的`javax.security.auth.kerberos`包中,提供了与Kerberos协议交互的一系列...

    Java实现小游戏.zip

    Java实现小游戏.zipJava实现小游戏.zipJava实现小游戏.zipJava实现小游戏.zip Java实现小游戏.zipJava实现小游戏.zipJava实现小游戏.zipJava实现小游戏.zip Java实现小游戏.zipJava实现小游戏.zipJava实现小游戏.zip...

    Java实现扫雷游戏.zip

    Java实现扫雷游戏.zipJava实现扫雷游戏.zipJava实现扫雷游戏.zipJava实现扫雷游戏.zip Java实现扫雷游戏.zipJava实现扫雷游戏.zipJava实现扫雷游戏.zipJava实现扫雷游戏.zip Java实现扫雷游戏.zipJava实现扫雷游戏....

    java实现五子棋游戏.zip

    java实现五子棋游戏.zipjava实现五子棋游戏.zipjava实现五子棋游戏.zip java实现五子棋游戏.zipjava实现五子棋游戏.zipjava实现五子棋游戏.zip java实现五子棋游戏.zipjava实现五子棋游戏.zipjava实现五子棋游戏.zip...

    java实现课程表

    【Java实现课程表】是一个基于Java编程语言设计的特定于某个学校的教务系统课程表程序。这个程序的主要目的是为了展示如何使用Java技术来构建一个能够显示、管理个人课程的工具。由于不同学校的教务系统差异,这个...

    基于Java实现的SSM框架整合实战案例

    基于Java实现的SSM框架整合实战案例 基于Java实现的SSM框架整合实战案例 基于Java实现的SSM框架整合实战案例 基于Java实现的SSM框架整合实战案例 基于Java实现的SSM框架整合实战案例 基于Java实现的SSM框架整合实战...

    Java实现的扫雷游戏.zip

    Java实现的扫雷游戏.zipJava实现的扫雷游戏.zipJava实现的扫雷游戏.zip Java实现的扫雷游戏.zipJava实现的扫雷游戏.zipJava实现的扫雷游戏.zip Java实现的扫雷游戏.zipJava实现的扫雷游戏.zipJava实现的扫雷游戏.zip...

    Kmeans文本聚类java实现

    在Java环境中实现KMeans算法进行文本聚类,可以为大数据分析、信息检索和推荐系统等应用场景提供有力支持。 KMeans算法的基本思想是通过迭代过程,不断调整样本的归属,使得同一簇内的样本尽可能接近,不同簇间的...

    Java实现贪吃蛇小游戏.zip

    Java实现贪吃蛇小游戏.zipJava实现贪吃蛇小游戏.zipJava实现贪吃蛇小游戏.zip Java实现贪吃蛇小游戏.zipJava实现贪吃蛇小游戏.zipJava实现贪吃蛇小游戏.zip Java实现贪吃蛇小游戏.zipJava实现贪吃蛇小游戏.zipJava...

    AI五子棋游戏,Java实现.zip

    AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI五子棋游戏,Java实现AI...

    JAVA实现小游戏资源.zip

    JAVA实现小游戏资源.zipJAVA实现小游戏资源.zipJAVA实现小游戏资源.zip JAVA实现小游戏资源.zipJAVA实现小游戏资源.zipJAVA实现小游戏资源.zip JAVA实现小游戏资源.zipJAVA实现小游戏资源.zipJAVA实现小游戏资源.zip...

    Java实现大富翁游戏.zip

    Java实现大富翁游戏.zipJava实现大富翁游戏.zipJava实现大富翁游戏.zip Java实现大富翁游戏.zipJava实现大富翁游戏.zipJava实现大富翁游戏.zip Java实现大富翁游戏.zipJava实现大富翁游戏.zipJava实现大富翁游戏.zip...

    Java实现小飞机游戏.zip

    Java实现小飞机游戏.zipJava实现小飞机游戏.zipJava实现小飞机游戏.zip Java实现小飞机游戏.zipJava实现小飞机游戏.zipJava实现小飞机游戏.zip Java实现小飞机游戏.zipJava实现小飞机游戏.zipJava实现小飞机游戏.zip...

    snmpv3 java实现

    java实现的简单网络管理协议!附件是整个工程,下载下来配置ip就可以运行,附有mib库,支持snmpV1,V2,V3版本协议!绝对是好资源,为了兼容移动的网络设备控制,研究了一段时间,现分享出来。不懂得可以找我

    Java实现远程控制技术(附完整源代码)

    本文将深入探讨如何使用Java实现远程控制功能,并结合提供的源代码进行解析。 首先,Java作为一种跨平台的编程语言,拥有丰富的库和API,能够方便地实现网络通信和多线程操作,这为构建远程控制应用提供了坚实的...

    java实现对接LED屏

    Java 实现对接LED屏是一项技术任务,涉及到Java编程语言与硬件设备的交互,特别是与LED显示设备的通信。LED屏通常用于广告展示、信息传递等场合,而通过编程语言控制LED屏可以实现动态内容的展示和自定义效果。 ...

Global site tag (gtag.js) - Google Analytics