记一次 "排它锁" 和 "自旋锁" 的简单实现

记一次排它锁自旋锁的简单实现

  • 定义一个lock接口

    public interface PutMessageLock {
        void lock();
    
        void unlock();
    }
    
  • 排它锁实现

    • 使用java自带的 ReentrantLock即可
    public class PutMessageReentrantLock implements PutMessageLock {
        private ReentrantLock putMessageNormalLock = new ReentrantLock(); // NonfairSync
    
        @Override
        public void lock() {
            putMessageNormalLock.lock();
        }
    
        @Override
        public void unlock() {
            putMessageNormalLock.unlock();
        }
    }
    
  • 自旋锁实现

    • 使用 cas + 循环 来实现
    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);
        }
    }
    

----------------------------------------- 广告时间 -----------------------------------------

各位看官,  欢迎关注公众号,每天推送有意思的小东西哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值