11 redis中分布式锁的实现

  1. 单机锁代码
java 复制代码
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;

public class AloneLock implements Lock {
    AtomicReference<Thread> owner = new AtomicReference<>();
    //队列--存放哪些没有抢到锁的线程
    LinkedBlockingQueue<Thread> waiters = new LinkedBlockingQueue<>();
    //实现加锁
    @Override
    public void lock() {
        while (!owner.compareAndSet(null,Thread.currentThread())){
            waiters.add(Thread.currentThread());
            LockSupport.park();//让当前线程阻塞
            waiters.remove(Thread.currentThread());//解锁了,就需要把线程从等待列表中删除
        }
    }
    //实现解锁
    @Override
    public void unlock() {
        if(owner.compareAndSet(Thread.currentThread(),null)){
            for (Object  object:waiters.toArray()){
                Thread  next= (Thread) object;
                LockSupport.unpark(next);
            }
        }
    }

    @Override
    public void lockInterruptibly() throws InterruptedException {

    }

    @Override
    public boolean tryLock() {
        return false;
    }

    @Override
    public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
        return false;
    }
    @Override
    public Condition newCondition() {
        return null;
    }
}
  1. 分布式锁
相关推荐
tongluowan00712 分钟前
MySQL中列数量及长度
数据库·mysql
-liming-28 分钟前
单片机设计_串口调试工具
数据库·单片机·mongodb
鹿角片ljp41 分钟前
从告警检测到智能研判:SQL 注入研判模型的设计与实践
数据库·sql
秋漓1 小时前
Redis学习笔记
redis
covco2 小时前
分布式架构实战:全平台矩阵管理系统的技术实现与性能优化
分布式·矩阵·架构
小新同学^O^2 小时前
简单学习 --> Spring事务
数据库·学习·spring
前进的李工2 小时前
MySQL慢查询日志优化实战
数据库·mysql·性能优化
KaMeidebaby2 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
ECT-OS-JiuHuaShan2 小时前
彻底定理化:从量子纠缠到量子代谢
数据库·人工智能·学习·算法·生活·量子计算