用Java 实现行锁(区别于表锁)
大家好,前几天跟一位朋友交流技术,说到了Java中的锁机制,其实锁机制在现在的大用户量,高并发场景下的使用很常见,但是如果说让自己来实现一个行级锁,这种细粒度的实现,确实是需要仔细思考的,下面的代码是我写的一个设计思路,欢迎大家批评指正。
import java.util.concurrent.ConcurrentHashMap;
public class MyRowLock {
private ConcurrentHashMap map = new ConcurrentHashMap();
/**
* 行锁的加锁方法
*/
public synchronized void lock(String id) throws Exception{
//System.out.println("当前线程 " + Thread.currentThread().getName());
while(map.containsKey(id)){
wait();
}
map.put(id,"");
//System.out.println("线程 " + Thread.currentThread().getName() + "拿到锁 , 锁定资源" + id);
}
/**
* 行锁的解锁方法
*/
public synchronized void unlock(String id){
while(map.containsKey(id)){
map.remove(id);
//System.out.println("线程 " + Thread.currentThread().getName() +