使用 redisson 对资源进行加锁

redisson 是 利用redis 的单线程 和 第一次设置值返回true 在 设置相同值 返回false 的特点进行加锁的.

如果返回true说明是第一次设置值,false,说明不是第一次,我们让第一次结束时删除值,解除对资源的占用.达到解锁的目的

<!--redis 锁 客户端-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.8.2</version>
        </dependency>

使用非阻塞的方式加锁

String account2 = validAccount.getAccount();
account2=account2+"_Lock";
RLock lock = redissonClient.getLock(account2);

boolean b1 = lock.tryLock();//加锁
        if (!b1){
            String name = Thread.currentThread().getName();
            System.out.println(name+"_--获取锁失败   "+account2);
            return false;
        }


try{
            //lock.lock(30,TimeUnit.SECONDS);
            String name = Thread.currentThread().getName();
            System.out.println(name+"_--拿到锁   "+account2);
            Thread.sleep(50000);
           
        }finally {
           
            String name = Thread.currentThread().getName();
            System.out.println(name+"_--释放锁  "+account2);
            lock.unlock();//释放锁
        }

阻塞的方式加锁

String account2 = validAccount.getAccount();
        account2=account2+"_Lock";
        RLock lock = redissonClient.getLock(account2);

 try{
            lock.lock(30,TimeUnit.SECONDS);//加锁

            //拿到锁,拿不到在上一行等待
            String name = Thread.currentThread().getName();
            System.out.println(name+"_--拿到锁   "+account2);
            Thread.sleep(50000);
            
        }finally {
     
            String name = Thread.currentThread().getName();
            System.out.println(name+"_--释放锁  "+account2);
            lock.unlock();//解锁
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值