栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用ConcurrentHashMap对key进行加锁防止线程阻塞

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用ConcurrentHashMap对key进行加锁防止线程阻塞

package com.zhou.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


public class KeyLock {
    private static Map lock = new ConcurrentHashMap<>();

    
    public static boolean lock(String key){
        Object my = new Object();
        Object o = lock.computeIfAbsent(key,l->my);
        return my == o;
    }
    public static void unlock(String key){
        lock.remove(key);
    }
}

上述代码在并发场景中,key值相同的线程会争抢锁,但只有一个线程能抢到锁,其他没有抢到锁的线程,不去等待锁释放,直接返回失败,可以避免高并发场景下线程阻塞而导致服务器资源耗尽。

if(KeyLock.lock(key)){
    try{
        //do something
    }finally {
        //加锁成功后,一定要在finally里面解锁,保证锁一定会释放
        KeyLock.unlock(key);
    }
}else{
    return "请稍后再试";
}

应当注意的是:抢到锁的线程执行完一定要保证释放锁,否则其他线程将无法访问key值锁定的操作

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号