读写复制

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

  

posted @ 2020-08-13 08:32  木叶小寒江  阅读(202)  评论(0编辑  收藏  举报