zoukankan      html  css  js  c++  java
  • 读写复制

    描述:Copy-On-Write指的是写时复制,这是一种技术,更是一种思想。可以帮助我们解决并发读写的问题

    一、Java中CopyOnWrite

      jdk中CopyOnWriteArrayList是写时复制容器,它的工作流程是:平时查询的时候,随便访问不需要加锁;只有在写入/删除的时候,才会从原来数据复制一个副本出来,然后对这个副本进行修改,最后用副本覆盖原来的数据

      源码如下:

     1 public boolean add(E var1) {
     2         ReentrantLock var2 = this.lock;
     3         var2.lock();
     4       
     5         boolean var6;
     6         try {
     7             Object[] var3 = this.getArray();
     8             int var4 = var3.length;
     9             Object[] var5 = Arrays.copyOf(var3, var4 + 1);
    10             var5[var4] = var1;
    11             this.setArray(var5);
    12             var6 = true;
    13         } finally {
    14             var2.unlock();
    15         }
    16 
    17         return var6;
    18  }

      优点:适用于读多写少

      缺点:

        只能保证最终一致性,在复制但是没有替换的这段时间,读到的数据任然是旧的数据。

        对象较大的时候,频繁复制替换会消耗大量内存,从内引发Java GC

    二、主从复制

      Redis和mysql的主从复制其实也包含了这个思想。

      

  • 相关阅读:
    java框架
    MVC编程模式
    java各版本简单对比
    java设计模式
    ES中TF-IDF算法
    es分词器
    java应用零停机,时间索引重建(reindex)
    Spring源码由浅入深系列一 简介
    Spring源代码解析(收藏)
    spring源码读书笔记
  • 原文地址:https://www.cnblogs.com/yejiang/p/13494341.html
Copyright © 2011-2022 走看看