在Java中,可以使用ConcurrentHashMap来实现不同订单号的操作不加锁,同一订单号的操作加锁的需求。以下是一个简单的示例代码:
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
public class OrderLock {
private final ConcurrentHashMap<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();
public void executeOperation(String orderNumber, Runnable operation) {
ReentrantLock orderLock = lockMap.computeIfAbsent(orderNumber, k -> new ReentrantLock());
orderLock.lock();
try {
operation.run();
} finally {
orderLock.unlock();
}
}
}
使用ConcurrentHashMap的computeIfAbsent方法,可以保证对于不同的订单号,如果是第一次执行操作,它将创建一个新的ReentrantLock实例,并将其与订单号关联。之后的执行将重用相同的锁。通过使用ReentrantLock的lock和unlock方法,可以确保同一订单号的操作是互斥执行的。
本文介绍了如何在Java中使用ConcurrentHashMap配合ReentrantLock实现在不同订单号下无需锁,同一订单号下加锁的线程安全操作,确保了对订单号的互斥访问。
618

被折叠的 条评论
为什么被折叠?



