flowchart TD
    A[写操作 eg. add] --> B{获取独占锁};
    B --> C[锁定成功];
    C --> D[复制原数组<br>创建新数组副本];
    D --> E[在新数组上进行修改];
    E --> F[将原数组引用指向新数组];
    F --> G[释放锁];
    
    H[读操作 eg. get] --> I[直接访问当前数组引用];
    I --> J[返回数据];
    
    F -.->|通过 volatile 变量<br>保证对读操作立即可见| I;

image.png