java相同数据同时操作锁定示例代码
在这个例子中,我们创建了两个线程,并让它们同时执行 formData.processData() 方法。由于传入的参数相同,即都是 “2”,因此第二个线程会被阻塞,直到第一个线程释放了锁。
您可以通过更改传入的参数,例如将 a 改为 “3”,可以并发执行
public class main {
public static void main(String[] args) throws IOException {
String s = "2";
String a = "2";
FormData formData = new FormData();
Thread thread1 = new Thread(() -> formData.processData(s));
Thread thread2 = new Thread(() -> formData.processData(a));
thread1.start();
thread2.start();
}
}
//方法
class FormData {
private ConcurrentHashMap<String, Lock> locks = new ConcurrentHashMap<>();
public FormData() {
}
public void processData(String s) {
Lock lock = locks.computeIfAbsent(s, k -> new ReentrantLock());
try {
if (!lock.tryLock()) {
System.out.println("无啊");
} else {
System.out.println("有");
}
} finally {
lock.unlock(); // 释放锁
}
}
}