您可以在日期的时间散列单个锁。
private static final ConcurrentMap dateLock = new ConcurrentHashMap();
public static Lock getLock(Date date){
Lock lock = dateLock.get(date.getTime());
if(lock == null){
Lock lock = new ReentrantLock();
Lock temp =dateLock.putIfAbsent(lock);
lock = temp == null ? lock : temp;
}
return lock;
}如果您需要同一天,而不一定是确切的日期(以毫秒为单位),您可以执行类似的操作
private static final ConcurrentMap dateLock = new ConcurrentHashMap();
public static Lock getLock(Date date){
String formattedDate = new SimpleDateFormat("MM\dd\yyyy").parse(date);
Lock lock = dateLock.get(formattedDate);
if(lock == null){
Lock lock = new ReentrantLock();
Lock temp =dateLock.putIfAbsent(lock);
lock = temp == null ? lock : temp;
}
return lock;
}然后任何需要在日期互斥的请求
Date date = ...;
Lock lock = getLock(date);
lock.lock();等等