当前位置: 首页 > news >正文

昆山网站推广四川网站建设费用

昆山网站推广,四川网站建设费用,冠县做网站推广,织梦网站演示一、读锁和写锁概念 读锁#xff1a; 也称共享锁#xff0c;多个线程可以共享资源#xff0c;同时读取数据和资源#xff0c;但是不允许出现写操作。多个线程可以同时持有读锁#xff0c;提高并发性能#xff0c;因为不会对数据修改。 写锁#xff1a; 也称排他锁 也称共享锁多个线程可以共享资源同时读取数据和资源但是不允许出现写操作。多个线程可以同时持有读锁提高并发性能因为不会对数据修改。 写锁 也称排他锁只允许一个线程独占地对共享资源进行写操作其他线程无法同时持有写锁或读锁。写锁的目的是保证在写操作期间没有其他线程对资源进行读或写操作从而确保数据的一致性。 使用场景 如果多个线程只需要读取共享资源而不进行修改那么可以使用读锁来提高并发性能。 如果有线程需要修改共享资源那么必须使用写锁来保证数据的一致性。 二、ReentrantReadWriteLock ReentrantReadWriteLock 实现了 ReadWriteLock 接口可以获取到读锁共享锁写锁独占锁。同时通过构造方法可以创建锁本身是公平锁还是非公锁。 默认是非公平锁性能也更好一点。构造方法传入 true 时为公平锁。 只有读锁与读锁之间是共享的其他的读锁与写锁写锁与写锁都是互斥的不能同时持有。 2.1 线程进入读锁的前提条件 不持有其他线程的写锁没有写请求或有写请求但调用线程和持有锁的线程是同一个 2.2 线程进入写锁的前提条件 没有其他线程的读锁没有其线程的写锁 2.3 锁升级和锁降级 ReentrantLock 具备可重入的能力即同一个线程多次获取锁不引起阻塞 那么 ReentrantReadWriteLock 关于可重入性需要额外知晓两个概念即锁升级和降级 锁升级读锁变为写锁 锁降级写锁变为读锁 重入时锁升级不支持持有读锁的情况下去获取写锁会导致获取写锁永久等待需要先释放读锁再去获得写锁 重入时锁降级支持持有写锁的情况下去获取读锁造成只有当前线程会持有读锁因为写锁会互斥其他的锁 2.4 使用介绍 构造方法 public ReentrantReadWriteLock()默认构造方法非公平锁 public ReentrantReadWriteLock(boolean fair)true 为公平锁 常用API public ReentrantReadWriteLock.ReadLock readLock()返回读锁 public ReentrantReadWriteLock.WriteLock writeLock()返回写锁 lock()加锁 unlock()解锁 tryLock()尝试获取锁 加解锁 ReadWriteLock readWriteLock new ReentrantReadWriteLock();Lock readLock readWriteLock.readLock();readLock.lock();try {// ........ 临界区} finally {readLock.unlock();}锁降级 w.lock(); try {r.lock(); // 降级为读锁, 释放写锁, 这样能够让其它线程读取缓存try {// ...} finally{w.unlock(); // 要在写锁释放之前获取读锁} } finally{r.unlock(); }2.5 运用场景 读写锁读多的写少的场景一般为使用缓存的场景。 即读取数据库中的数据到内存或者缓存中间件中后期获取数据从缓存获取当数据更新时需要同步更新缓存和数据库。 先清除缓存还是前更新数据库 先清缓存可能造成刚清理缓存还没有更新数据库高并发下其他线程直接查询了数据库过期数据到缓存中这种情况非常严重直接导致后续所有的请求缓存和数据库不一致。 先更新据库可能造成刚更新数据库还没清空缓存就有线程从缓存拿到了旧数据这种情况概率比较小影响范围有限只对这一次的查询结果有问题。 实际在缓存中运用读写锁 public class CacheTest {// 缓存对象 这里使用一般map 放于内存MapString, String cache new HashMap();// 创建读写锁ReadWriteLock readWriteLock new ReentrantReadWriteLock();// 从缓存中获取数据 读操作public String getFromCache(String key) {// 加读锁防止其他线程修改缓存即防止写操作readWriteLock.readLock().lock();try {String value cache.get(key);// 缓存中存在 即缓存命中if(value ! null) {return value;}} finally {// 释放读锁readWriteLock.readLock().unlock();}//如果缓存没有命中从数据库中加载 加写锁readWriteLock.writeLock().lock();try {// 细节处理为防止重复查询数据库, 再次验证 因为get 方法上面部分是可能多个线程进来的, 可能已经向缓存填充了数据String value cache.get(key);if(value null) {// 从数据库查询value 从数据库中获取到数据并赋值 这里自行替换业务;cache.put(key, value);}return value;} finally {// 解锁写readWriteLock.writeLock().unlock();}}// 更新数据public void updateData(String key, String value) {// 加写锁readWriteLock.writeLock().lock();try {// 更新操作TODO 更新数据库// 清空缓存cache.remove(key);} finally {// 解锁写readWriteLock.writeLock().unlock();}} }
http://www.zqtcl.cn/news/806909/

相关文章:

  • 中国建设银行网站易方达消费我有域名怎么做网站
  • 网站图片规格2023年7 8月十大新闻
  • 建立一个小型网站多少钱晋城网站制作
  • 泰安哪家做网站好定制app软件
  • 成品网站设计网站wordpress 登录慢
  • 广州营销型网站建设公司哪家名气大朝阳网络公司
  • 网站怎么做排查修复关键词排名优化网站
  • 上海企业网站动易网站模版的制作
  • 北京网站建设华大网站模拟课堂模式应该怎么做
  • 站长工具 seo综合查询有新的wordpress更新是英文版
  • 做微信头图的网站成都做seo网站公司
  • 工程设计东莞网站建设技术支持wordpress+打断点
  • 一个域名可以绑定几个网站网站建设如何做账
  • PHP网站建设的课后笔记一个产品的营销方案
  • 宝塔linux面板官网泰州seo
  • 咸阳城乡建设局网站动漫网站设计方案
  • 狮岭网站建设怎么建设英文网站
  • 网站建设需要交印花税吗wordpress远程自动下载图片
  • 专门做外国的网站有哪些seo网络优化师就业前景
  • 安阳信息港网站门户网站的特点
  • 宏大建设集团网站婚恋网站建设的目的
  • 企业网站建设有什么好设计网站公司的账务处理
  • 网站备案有什么要求wordpress导航栏上方
  • 河南专业建网站wordpress seo模板
  • 网站开发的教学课程策划公司经营范围有哪些
  • 需要锦州网站建设男生和女生做污的事情免费网站
  • 互联网网站商标免费做h5的网站有哪些
  • 营销型网站五大系统 单仁深圳住房与建设局官网
  • nas 做网站wordpress音乐门户主题
  • 企业邮箱163登录入口seo建站需求