java 读写锁

it2022-05-05  131

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<SjCommunityNotice> 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 


最新回复(0)