ReadWriteLock读写锁

编程入门 行业动态 更新时间:2024-10-10 09:16:31

<a href=https://www.elefans.com/category/jswz/34/1724274.html style=ReadWriteLock读写锁"/>

ReadWriteLock读写锁

ReadWriteLock读写锁

并发写需要等待,并发读等于无锁

  • 读和写是同一把锁控制
  • 只要写锁没释放,读锁就必须等待,反之一样
  • 允许多个读锁 和 仅允许一个 写锁
  • 读锁是共享锁,写锁是排他锁(互斥锁)
  • 读写锁是同一把锁 RReadWriteLock lock = redissonClient.getReadWriteLock(“rw-lock”); get set取值也是同一个对象

需求:保证获取的是最新的数据? 怎么操作?

更新完数据就释放写锁,定时任务 判断锁是否存在,如果锁存在,等锁释放后取值

这里是先执行写锁再执行读锁,当写锁释放时,写锁读锁同时渲染数据

 //写锁@GetMapping("/write")@ResponseBodypublic String writeValue(){//读写锁是同一把锁RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");RLock writeLock = lock.writeLock();String uuid = "";try {uuid = UUID.randomUUID().toString();writeLock.lock();System.out.println("写锁占用成功");Thread.sleep(30000);redisTemplate.opsForValue().set("writeValue", uuid);} catch (Exception e) {e.printStackTrace();} finally {//写锁释放,读锁才能使用writeLock.unlock();System.out.println("写锁释放完成");}return uuid;}//读锁@GetMapping("/read")@ResponseBodypublic String readValue(){RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");RLock readLock = lock.readLock();String uuid = "";try {readLock.lock();uuid = redisTemplate.opsForValue().get("writeValue");System.out.println("读锁占用成功");Thread.sleep(30000);} catch (Exception e) {e.printStackTrace();} finally {readLock.unlock();System.out.println("读锁释放完成");}return uuid;}

先读后写,读锁释放,写锁才能占用,这里就可以看出来读和写是同一把锁

更多推荐

ReadWriteLock读写锁

本文发布于:2024-02-12 00:26:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1684586.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ReadWriteLock

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!