示例代码 import java.util.Hashtable; import java.util.Map; import java.util.concurrent.TimeUnit; public class Main { //若要实现分布式,可使用redis进行替换 private static final Map<String,Object> lockMap = new Hashtable<>(); /** 数据接口 */ public static Dao dao; public static void main(String[] args) { String id = "test"; if (dao.selectById(id) == null) { shareMethod(id); }else { //不进入cas } } private static void shareMethod(String id){ try { while (true){ if (lockMap.putIfAbsent(id,new Object()) == null){ break; }else { try { TimeUnit.MICROSECONDS.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } Object obj = dao.selectById(id); //拿到锁的时候,有可能前一个线程已经对数据进行了初始化,所以需要二重校验 if (obj == null){ dao.initById(id); } //TODO 对数据进行处理 }finally { //释放锁 lockMap.remove(id); } } }