`

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非阻塞式的通信

    ### Java非阻塞式通信详解 #### 一、线程阻塞的概念与影响 线程阻塞是指在程序运行过程中,线程遇到某些条件而暂时停止执行的状态,这种状态下线程将不会消耗CPU资源,直到阻塞条件解除。在传统的Java网络编程中,...

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

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

    Java并发编程(21)并发新特性-阻塞队列和阻塞栈(含代

    在Java并发编程中,阻塞队列和阻塞栈是两个重要的并发数据结构,它们在多线程环境下的高效通信和资源管理中扮演着至关重要的角色。这些数据结构源自Java的并发包`java.util.concurrent`,是实现并发设计模式如生产者...

    Java技术栈相关代码和文档.zip

    传统的IO基于阻塞模型,而NIO引入了非阻塞和选择器机制,提高了服务器处理大量连接的性能。理解并能应用Buffer、Channel、Selector等NIO组件是现代Java开发者的必备技能。 Java技术栈还包括了Spring框架,这是一个...

    LinkedList实现栈

    使用`synchronized`关键字通常较为简单,但可能导致阻塞,而`BlockingQueue`则提供了非阻塞的等待机制,通常在高并发场景下更优。 总之,LinkedList由于其灵活的插入和删除操作,是实现栈的一种高效选择。在多线程...

    java网络编程.zip

    05-1-Java非阻塞通信2016版.ppt和05-2-非阻塞HTTP服务器2016版.ppt聚焦于Java的非阻塞I/O(NIO),这是高性能网络编程的重要组成部分。非阻塞I/O允许程序在等待数据时执行其他任务,提高了系统资源的利用率,特别...

    Java Desktop_java_javaDesktop_desktop_

    5. **NIO(非阻塞I/O)**:在处理大量I/O操作时,Java NIO可以提供更好的性能。 6. **AWT和Swing的区别**:理解两者的关系和适用场景,以便选择合适的技术栈。 7. **JDBC(Java数据库连接)**:如何使用Java连接和...

    JAVA核心面试知识整理.pdf

    JAVA IO/NIO:Java IO是基于流的IO模型,包括阻塞IO模型、非阻塞IO模型、多路复用IO模型、信号驱动IO模型和异步IO模型。Java NIO是基于缓冲区(Buffer)和通道(Channel)的IO模型,支持非阻塞和选择器(Selector)。 JVM...

    java虚拟机规范 Java SE7

    11. **NIO.2**:Java SE7扩展了非阻塞I/O(NIO),提供了文件系统路径、异步I/O操作和文件通道等新功能,增强了I/O性能。 12. **动态语言支持**:JDK 7增加了对动态语言的支持,如JSR 292,使得JVM可以更好地运行如...

    高质量java编程

    5. **输入/输出(I/O)**:Java的I/O流系统复杂而强大,书籍讲解了如何进行文件操作、网络通信等,包括File类、InputStream和OutputStream家族、Reader和Writer家族,以及NIO(非阻塞I/O)。 6. **多线程**:Java提供...

    Java面试题2022

    而NIO(非阻塞I/O)则引入了通道和选择器,提高了程序的并发能力,对高并发应用有显著提升。 7. **网络编程**:Java的Socket编程是面试中的常见话题,理解TCP和UDP的区别,以及如何构建基于Socket的应用程序,有助...

    java面试 java书籍

    - **NIO**:理解非阻塞I/O的特点,了解Selector、Channel和Buffer的用法。 6. **反射机制** - **Class类**:如何通过Class对象获取类信息,动态创建对象和调用方法。 - **注解处理**:了解元注解和自定义注解,...

    MIT JAVA 阿德莱德大学JAVA课程

    8. **IO与NIO**:讨论Java的I/O系统,包括文件操作,以及非阻塞I/O(New IO,NIO)和NIO.2的新特性。 9. **多线程编程**:理解线程的创建、同步与通信,如synchronized关键字、wait()、notify()方法,以及线程池的...

    java笔记与java核心内容解读

    NIO(New IO)提供了一种更高效、非阻塞的I/O模型。 8. **网络编程**:Java提供了Socket编程接口,可以用来创建客户端和服务器端的通信应用。 9. **反射机制**:反射是Java的一个强大特性,允许程序在运行时动态地...

    java HttpServer源码工程

    这个工程的核心在于理解如何使用Java NIO(非阻塞I/O)和Java网络编程来构建一个高效的服务器。下面我们将详细探讨Java HttpServer的实现原理、关键组件以及其在实际应用中的价值。 一、Java NIO基础 Java NIO(New...

    用java实现的dhcp

    Java的`java.util.concurrent`库提供了线程池和并发工具,而`java.nio`包则支持非阻塞I/O,这些都是构建高并发服务器的关键。 后端挂载集群服务器意味着可以实现负载均衡和高可用性。这通常需要一个分布式系统的...

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

    为了实现线程安全,Java提供了多种线程同步机制,例如阻塞同步(互斥同步)和非阻塞同步(自旋锁等)。此外,Java内存模型规定了主内存和工作内存之间的交互操作,以及对原子性、可见性、有序性的保证。 在JVM的...

    Java学习、面试必备

    - 文件与IO操作:学习NIO(非阻塞IO)和File类,提高文件操作效率。 - 设计模式:了解工厂、单例、装饰器、观察者等常见设计模式,提升代码复用性和可维护性。 3. **Java面试重点** - 垃圾回收与内存管理:理解...

    Java最新开发手册(黄山版)

    2. NIO:介绍Java新推出的非阻塞I/O模型,提高I/O操作的效率。 五、多线程 1. 线程的创建与控制:讲解Thread类和Runnable接口的使用,以及线程的同步与通信。 2. 线程池:介绍ExecutorService和ThreadPoolExecutor...

    java必备宝典(经典必备)

    NIO(非阻塞I/O)是Java 1.4引入的新特性,提高了处理高并发I/O的效率。 6. **多线程**:Java内置对多线程的支持,可以创建Thread对象或实现Runnable接口来实现并发执行。同步机制(如synchronized关键字、wait()、...

Global site tag (gtag.js) - Google Analytics