栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PutMessageLock、PutMessageSpinLock、PutMessageReentrantLock 自旋锁的实现以及可重入锁实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PutMessageLock、PutMessageSpinLock、PutMessageReentrantLock 自旋锁的实现以及可重入锁实现

PutMessageLock、PutMessageSpinLock、PutMessageReentrantLock 自旋锁的实现以及可重入锁实现
  • 说明
  • 源码
    • 接口PutMessageLock
    • 重入实现PutMessageReentrantLock
    • 自旋实现PutMessageSpinLock
  • 重入锁和自旋锁的区别
  • compareAndSet(CAS, 自旋锁)理解

说明

PutMessageLock :锁的接口
PutMessageReentrantLock:可重入锁的实现
PutMessageSpinLock: 自旋锁的实现

源码很简单直接贴

源码 接口PutMessageLock
public interface PutMessageLock {
    void lock();

    void unlock();
}
重入实现PutMessageReentrantLock
public class PutMessageReentrantLock implements PutMessageLock {
    private ReentrantLock putMessageNormalLock = new ReentrantLock(); // NonfairSync

    @Override
    public void lock() {
        putMessageNormalLock.lock();
    }

    @Override
    public void unlock() {
        putMessageNormalLock.unlock();
    }
}
自旋实现PutMessageSpinLock
public class PutMessageSpinLock implements PutMessageLock {
    //true: Can lock, false : in lock.
    private AtomicBoolean putMessageSpinLock = new AtomicBoolean(true);

    @Override
    public void lock() {
        boolean flag;
        do {
            flag = this.putMessageSpinLock.compareAndSet(true, false);
        }
        while (!flag);
    }

    @Override
    public void unlock() {
        this.putMessageSpinLock.compareAndSet(false, true);
    }
}
重入锁和自旋锁的区别

网上资料很多,简单来说,自旋锁不能先锁两次再释放两次,而重入锁可以

compareAndSet(CAS, 自旋锁)理解
  • CAS compareAndSet,compareAndExchange,compareAndSwap
    这个函数会先进行比较,如果相比较的两个值是相等的,那么就进行更新操作。
  • CAS使用场景
AtomicInteger atomicInteger = new AtomicInteger(1);
atomicInteger.compareAndSet(1, 2);

  1. 初始值是1
  2. compareAndSet(expect, update), 要想更新成功的话,那么这个expect的值一定是1,否则是不会被更新的。
AtomicInteger atomicInteger = new AtomicInteger(1);
atomicInteger.compareAndSet(2, 3);
  1. 上面的语句,就永远无法把值更新为3。
  • 自旋操作: 线程一直在执行逻辑,也就是一直让CPU进行计算操作。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号