java 读写锁

1、读写互斥 写写互斥 

2、示例:数据获取修改并更新

mysql 其实自带锁,而且是行锁(InnoDB),后面有介绍,这里仅做使用示例

//构造读写锁
    private ReentrantReadWriteLock readwritelock=new ReentrantReadWriteLock();
    //读锁
    private Lock readLock=readwritelock.readLock();
    //写锁
    private Lock writeLock=readwritelock.writeLock();

    public SjCommunityNotice selectById(Serializable id){
        readLock.lock();
        SjCommunityNotice notice;
        try {
            notice=super.selectById(id);
        }
        finally
        {
            readLock.unlock();
        }

        return notice;
    }

    @Override
    public boolean updateForSet(String setStr, Wrapper wrapper) {
        writeLock.lock();
        boolean flag;
        try {
            flag=super.updateForSet(setStr,wrapper);
        }
        finally
        {
            writeLock.unlock();
        }
        return flag;
    }

mysql锁:

隐式加锁:

InnoDB自动加意向锁。
对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);
对于普通SELECT语句,InnoDB不会加任何锁;
显示加锁:

共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
排他锁(X) :SELECT * FROM table_name WHERE ... FOR UPDATE
用SELECT … IN SHARE MODE获得共享锁,主要用在需要数据依存关系时来确认某行记录是否存在,并确保没有人对这个记录进行UPDATE或者DELETE操作。

但是如果当前事务也需要对该记录进行更新操作,则很有可能造成死锁,对于锁定行记录后需要进行更新操作的应用,应该使用SELECT… FOR UPDATE方式获得排他锁。
--------------------- 
五分钟了解Mysql的行级锁:https://blog.csdn.net/zcl_love_wx/article/details/81983267 

你可能感兴趣的:(JAVA)