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

      

  • 相关阅读:
    jmap使用
    Spring boot后台搭建一使用MyBatis集成Mapper和PageHelper
    aspose.slides for java去除水印
    win10 解决Failed installing 'Tomcat8' service
    NoSQL数据库
    windows下Java调用可执行文件
    Neo4j CQL基本使用
    初识Neo4j
    (原)下载pubFig的python代码
    (原+译)win7远程连接ubuntu16.04
  • 原文地址:https://www.cnblogs.com/yejiang/p/13494341.html
Copyright © 2011-2022 走看看