• 读写复制


    描述: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的主从复制其实也包含了这个思想。

      

  • 相关阅读:
    uva1220--树的最大独立集+判重
    UVA12186--树型DP
    HDU4171--bfs+树
    远程调用
    高并发业务
    wireshark
    将java程序打包成exe文件
    将博客搬至CSDN
    Mysql分区
    MogileFS
  • 原文地址:https://www.cnblogs.com/yejiang/p/13494341.html
Copyright © 2020-2023  润新知