`

java 非阻塞的栈

阅读更多
本例中的非阻塞算法中能确保线程的安全性。
本例是摘自《JAVA并发编程实战》这本书的高级题部分
 
import java.util.concurrent.atomic.AtomicReference;

/**
 * Created by nspace on 15-4-18.
 */
//@ThreadSafe
public class CocurrentStack<E> {
    AtomicReference<Node<E>> top = new AtomicReference<Node<E>>();

    public void push(E item) {
        Node<E> newHead = new Node<E>(item);
        Node<E> oldHead;
        do {
            oldHead = top.get();
            newHead.next = oldHead;
        } while (!top.compareAndSet(oldHead, newHead));
    }

    public E pop() {
        Node<E> oldHead;
        Node<E> newHead;
        do {
            oldHead = top.get();
            if(oldHead == null) {
                return null;
            }
            newHead = oldHead.next;

        } while (!top.compareAndSet(oldHead, newHead));
        return oldHead.item;
    }

    private static class Node<E> {
        public final E item;
        public Node<E> next;

        private Node(E item) {
            this.item = item;
        }
    }
}
分享到:
评论

相关推荐

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    同步非阻塞 基于信号 多路复用 异步IO 类加载机制 双亲委派 OSGI 算法 搜索 二分 排序 选择 冒泡 插入 快速 归并 堆 桶 基数 常用算法 贪婪 回溯 剪枝 动态规划 数据挖掘算法 KMP算法 ...

    字节大佬总结的Java面试资料

    字节大佬总结的Java面试资料 ...TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞 的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。

    Java并发编程实战

    第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 ...第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性标注 参考文献

    疯狂JAVA讲义

    10.5 Java的异常跟踪栈 374 10.6 异常处理规则 376 10.6.1 不要过度使用异常 377 10.6.2 不要使用过于庞大的try块 378 10.6.3 避免使用Catch All语句 378 10.6.4 不要忽略捕获到的异常 379 10.7 本章小结 379 ...

    Spring5的Servlet和反应式技术栈解析

    1.Java大力转向了异步和非阻塞并发。2.Spring5为Web应用程序引入了完全非阻塞的反应式技术栈。3.反应式技术栈使用更少的资源处理更高的并发量,而且在客户端和服务器端的流式处理方面有突出的表现。4.SpringMVC为...

    Java 并发编程实战

    前 言 第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 ...第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性标注

    [java]读书笔记整理:一切都是对象

    用堆进行存储分配比用堆栈进行存储分配需要更多的时间(如果确实可以在java中向在C++中一样在栈中创建对象)。 4) 静态存储 这里的“静态”是指“在固定的位置”(尽管也在RAM里)。静态存储里存放程序运行时一直...

    JAVA面试题最全集

    堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27....

    java8看不到源码-pay-reactive-backend-examples:防火

    在过去十年左右的时间里,异步/非阻塞请求处理架构在整个行业中获得了巨大的吸引力,这主要是由于优化使用可用资源(H/W、S/W)的能力允许显着提高吞吐量。 尽管该模型已经广泛应用于其他(非 Java)技术栈(例如 ...

    Java 虚拟机面试题全面解析(干货)

    非阻塞同步 锁优化是在DK的那个版本? 为什么要提出自旋锁? 自旋锁的原理? 自旋的缺点? 什么是自适应自旋? 锁消除 锁粗化 轻量级锁 偏向锁 JDK是什么? JDK是用于支持Java程序开发的最小环境。 1.Java程序设计语言 2....

    Java并发编程(学习笔记).xmind

    栈封闭 ThreadLocal类 只读共享:不变对象一定是线程安全的 尽量将域声明为final类型,除非它们必须是可变的 分类 不可变对象 事实不可变对象 线程安全共享 封装有助于管理...

    javabitset源码-java_master:后端架构师技术图谱

    非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、PriorityBlockingQueue,采用...

    netty权威指南 第1版(李林峰) + 源码

    《Netty权威指南》第1版 是异步非阻塞通信领域的经典之作,基于最新版本Netty 5.0编写,是国内首本深入介绍Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。在理论方面,讲解了Netty的逻辑架构模型和...

    java核心知识点整理.pdf

    虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ...................................

    netty权威指南 第2版(李林峰) + 源码

    《Netty权威指南》第2版 是异步非阻塞通信领域的经典之作,基于最新版本Netty 5.0编写,是国内首本深入介绍Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。在理论方面,讲解了Netty的逻辑架构模型和...

    netty 权威指南 第二版 1到25章完整版

    netty 权威指南 第二版 1到25章完整版 《Netty 权威指南(第2 版)》是异步非阻塞通信领域的经典之作,基于最新版本的Netty 5.0 编写,是国内很难得一见的深入介绍Netty 原理和架构的书籍,也是作者多年实战经验的...

Global site tag (gtag.js) - Google Analytics