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. 分布式锁
相关推荐
XiaoLeisj2 分钟前
【MySQL — 数据库增删改查操作】深入解析MySQL的create & insert 操作
数据库·mysql
rkmhr_sef9 分钟前
开源的Text-to-SQL工具WrenAI
数据库·sql·开源
洪小帅29 分钟前
Django的models.model如何使用
数据库·python·django·sqlite
程序员入门中1 小时前
深入理解 @Transactional 注解与 Spring 事务机制
java·数据库·spring
MrZhangBaby1 小时前
SQL-leetcode—1193. 每月交易 I
数据库·sql·leetcode
m0_548514771 小时前
Microsoft SQL Serve的下载与安装
数据库·sql·microsoft
马船长1 小时前
ASP.NET代码审计 SQL注入篇(简单记录)
开发语言·数据库·sql·网络安全·asp.net
AI航海家(Ethan)1 小时前
django使用踩坑经历
数据库·postgresql·django·sqlite
一只小松许️1 小时前
RabbitMQ的死信队列
分布式·rabbitmq
有杨既安然1 小时前
Docker 从零开始掌握容器化技术
linux·运维·数据库·ubuntu·docker·容器·负载均衡