Java双份对象数据热切换 发表于 2019-08-21 | 更新于 2020-08-31 | 分类于 架构 | 阅读次数: 本文字数: 1.4k | 阅读时长 ≈ 1 分钟 1234567//当前副本public List<String> r1 = null;//第二个副本public List<String> r2 = null;public AtomicBoolean replicationIsEmpty = new AtomicBoolean(); 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051private void initCurrent() { r1 = new ArrayList<String>(10);}private void initReplication() { r2 = new ArrayList<String>(10);}/** * 更新数据至副本,同时切换副本状态 * * @param keys */private void addKeys(List<String> keys) { //replicationIsEmpty为true,表示可用 if (replicationIsEmpty.get()) { r2.addAll(keys); replicationIsEmpty.set(false); try { //等其他正在引用该数据方法处理完成 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } initCurrent(); } else { r1.addAll(keys); //先改状态,运行两份数据并存 replicationIsEmpty.set(true); try { //等其他正在引用该数据方法处理完成 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //后清空 initReplication(); }}/** * 根据副本状态,返回引用对象 * * @return */private List<String> getIdList() { if (!replicationIsEmpty.get()) { return r2; } else { return r1; }} ------ 本文结束------ 本文标题:Java双份对象数据热切换 文章作者:Perkins 发布时间:2019年08月21日 原始链接:https://perkins4j2.github.io/posts/42352/ 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。