`

自旋锁的简单实现

 
阅读更多
public class AtomicStringBuilder {
    private AtomicReference<Thread> sign =new AtomicReference<Thread>();
    StringBuilder sb = new StringBuilder();
    public void lock(){
        Thread current = Thread.currentThread();
        while(!sign .compareAndSet(null, current)){

        }
    }

    public void unlock (){
        Thread current = Thread.currentThread();
        sign.compareAndSet(current, null);

    }
    public void append(String str){
        lock();
        sb.append(str);
        unlock();
    }
    public  void setLength(int i){
        lock();
        sb.setLength(i);
        unlock();
    }
    public String toString(){
        String str = null;
        lock();
        str=  sb.toString();
        unlock();
        return str;
    }
}

 引用:http://ifeve.com/java_lock_see1/

分享到:
评论

相关推荐

    简单介绍SQL Server中的自旋锁

    为什么我们需要自旋锁? 用闩锁同步多个线程间数据结构访问,在每个共享数据结构前都放置一个闩锁没有意义的。闩锁与此紧密关联:当你不能获得闩锁(因为其他人已经有一个不兼容的闩锁拿到),查询就会强制等待,并...

    spin:一个 x86(_64) 自旋锁

    旋转Spin 提供了一个简单的自旋锁。用法由于阻塞在自旋锁上的 goroutines 在阻塞时不会完成任何有用的工作(与阻塞在sync.Mutex上的 goroutines 不同,后者会产生可运行的 goroutines),因此自旋锁应该只用于保护...

    sleeplocks:BEAM友好的ElixirErlang自旋锁

    该库旨在在Erlang / Elixir中提供简单的锁定机制,类似于自旋锁在其他语言中的工作方式-除了使用消息来传达锁定信息外。 这对于需要锁定同步的库很有用,而不必滚动自己的库(但是很简单)。 可以通过任意数量的...

    mymalloc:2 malloc实现的简单功能,专为Linux和gcc提供,具有原子自旋锁

    mymalloc mymalloc-2个malloc实现的简单功能,专为Linux和gcc提供,具有原子自旋锁 进一步的说明可以在我的博客文章找到 执照 麻省理工学院

    C语言实现基于Risc-V 的操作系统内核模拟设计与实现源代码,一个运行在RISC-V架构处理器上的玩具嵌入式操作系统

    1、支持多任务处理,实现了自旋锁,信号量机制以实现进程同步。 2、移植了FatFs文件系统,实现了基本的文件操作 3、实现了一个简易的Shell终端,作为人机交互接口 4、实现了一些应用层的简单应用,包含汉诺塔,迷宫...

    Java并发编程原理与实战

    理解自旋锁,死锁与重入锁.mp4 深入理解volatile原理与使用.mp4 JDK5提供的原子类的操作以及实现原理.mp4 Lock接口认识与使用.mp4 手动实现一个可重入锁.mp4 AbstractQueuedSynchronizer(AQS)详解.mp4 使用AQS重写...

    涵盖了90%以上的面试题

    自适应自旋锁 重量级锁 synchronized 可重入锁 土方法实现可重入锁 使用AQS类实现可重入锁 CAS MySQL 中的行级锁、表级锁和页级锁 java中的死锁 公平锁和非公平锁 锁的总结 锁的优化 .......... 还有好多,不想写了,...

    Python使用分布式锁的代码演示示例

    在计算机并发领域编程中总是会与锁打交道,锁又有很多种,互斥锁、自旋锁等等。 锁总是伴随着线程、进程这样的词汇出现,阮一峰有 一篇文章 对这些名词进行了简单易懂的解释。 我的理解是,使用线程、进程是为了实现...

    详解Golang互斥锁内部实现

    可以直接使用的,一个goroutine获得互斥锁后其他的goroutine只能等到这个gorutine释放该互斥锁,在Mutex结构中只公开了两个函数,分别是Lock和Unlock,在使用互斥锁的时候非常简单,本文并不阐述使用。 在使用sync....

    龙果 java并发编程原理实战

    第17节理解自旋锁,死锁与重入锁00:24:58分钟 | 第18节深入理解volatile原理与使用00:28:30分钟 | 第19节JDK5提供的原子类的操作以及实现原理00:27:10分钟 | 第20节Lock接口认识与使用00:19:54分钟 | 第21节手动...

    Java 并发编程原理与实战视频

    第17节理解自旋锁,死锁与重入锁00:24:58分钟 | 第18节深入理解volatile原理与使用00:28:30分钟 | 第19节JDK5提供的原子类的操作以及实现原理00:27:10分钟 | 第20节Lock接口认识与使用00:19:54分钟 | 第21节手动...

    龙果java并发编程完整视频

    第17节理解自旋锁,死锁与重入锁00:24:58分钟 | 第18节深入理解volatile原理与使用00:28:30分钟 | 第19节JDK5提供的原子类的操作以及实现原理00:27:10分钟 | 第20节Lock接口认识与使用00:19:54分钟 | 第21节手动...

    java并发编程

    第17节理解自旋锁,死锁与重入锁00:24:58分钟 | 第18节深入理解volatile原理与使用00:28:30分钟 | 第19节JDK5提供的原子类的操作以及实现原理00:27:10分钟 | 第20节Lock接口认识与使用00:19:54分钟 | 第21节手动...

    leetcode跳跃-Leetcode:液晶解决方案

    读写锁和自旋锁的逻辑 实现线程安全的阻塞队列 实现循环队列 实现一个智能指针(shared_ptr Or unique_ptr) 实现一个哈希表 ... 剑指offer 1. 线性表 数组 主要题型:二分查找,双指针,单调栈 双指针 26有序数组中...

    leetcode答案-theEmbeddedNewTestament.github.io:theEmbeddedNewTestament.gi

    实现自旋锁/互斥锁/信号机 测试和清除 使用互斥体实现 Semaphone 其他实现 洗牌 用read32准确(强调)读取64位寄存器 给定一个矩阵及其中心坐标,画圆 在原始字节流缓冲区中查找 32 位帧起始序列 内存跟踪器挂钩到 ...

    深入分析Linux内核源码

    4.8.3 自旋锁、读写自旋锁和大读者自旋锁 4.9 本章小节 第五章进程调度 5.1 Linux时间系统 5.1.1 时钟硬件 5.1.2 时钟运作机制 5.1.3 Linux时间基准 5.1.4 Linux的时间系统 5.2 时钟中断 5.2.1 时钟...

    linux网络编程

    37POSIX线程(一) POSIX线程库相关函数 用线程实现回射客户/服务器 38POSIX线程(二) 线程属性 线程特定数据 39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁...

Global site tag (gtag.js) - Google Analytics