用java实现一个行锁(RowLock)

java 版本的数据库行锁,使用wait/notify实现,当然可以使用别的方式如Lock下的await/signal

需求使用java写一个类,这个类有一个lock(String identifier)方法,用于传入一个唯一的标识标识数据库的某一行或者某个集合的某一条记录,当上锁之后,如果不适用unLock(String identifier)方法解锁,那么用于就不能访问这一条数据

 

直接上代码:

package com.lyzx.test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

public class JavaRowLock{
    private ConcurrentHashMap lockedMap = new ConcurrentHashMap();

    public synchronized void lock(String id) throws InterruptedException{
        while(lockedMap.containsKey(id)){
            wait();
        }
        lockedMap.put(id,"");
    }

    public synchronized void unLock(String id){
        if(lockedMap.containsKey(id)){
            lockedMap.remove(id);
            notifyAll();
        }
    }

    public static void main(String[] args){
        JavaRowLock lock = new JavaRowLock();

        List arr = new ArrayList<>();

        for(int i = 0;i<100;i++){
            arr.add(new A1(lock,"A"));
        }

        for(int i=0;i

 

你可能感兴趣的:(Java)