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. 分布式锁
相关推荐
weelinking2 小时前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
2301_803934612 小时前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
秋93 小时前
windows中安装redis
数据库·redis·缓存
Cosolar3 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
想唱rap3 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
SeaTunnel3 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?
大数据·数据库·人工智能·apache·seatunnel·数据同步
凯瑟琳.奥古斯特4 小时前
数据冗余与规范化的本质[数据库原理]
开发语言·数据库·职场和发展
_ku_ku_4 小时前
数据库系统原理 · SQL 数据定义、更新及数据库编程 · 自学总结
数据库·oracle
Mortalbreeze5 小时前
深度理解文件系统 ---- 从磁盘存储到内核存储
大数据·linux·数据库
2301_803934615 小时前
MySQL 字段类型选择规范指南
jvm·数据库·python