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. 分布式锁
相关推荐
Riden刘1 分钟前
SQL里怎么存变量?怎么优雅处理递归?不妨了解下CTE!
数据库·sql
2401_873204656 分钟前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python
阿蒙Amon9 分钟前
C#常用类库-详解JetBrains.Annotations
前端·数据库·c#
m0_7166670711 分钟前
工具、测试与部署
jvm·数据库·python
2501_9454248018 分钟前
构建一个基于命令行的待办事项应用
jvm·数据库·python
内网渗透27 分钟前
Komari 部署教程:无数据库、单文件、Docker 一键启动的监控工具
数据库·docker·容器·内网穿透·cpolar·远程办公·komari
未来龙皇小蓝36 分钟前
【MySQL-索引调优】08:模糊查询与索引
数据库·mysql·性能优化
数据知道39 分钟前
《深入掌握MongoDB数据库》 - 专栏介绍和目录
网络·数据库·mongodb
moxiaoran575341 分钟前
使用ShardingSphere实现MySQL读写分离(一)
数据库·mysql
CoovallyAIHub1 小时前
BMW GenAI4Q:每57秒下线一辆车,AI如何为每辆车定制专属质检清单
数据库·算法·架构