Java双份对象数据热切换

1
2
3
4
5
6
7
//当前副本
public List<String> r1 = null;

//第二个副本
public List<String> r2 = null;

public AtomicBoolean replicationIsEmpty = new AtomicBoolean();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
private 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 国际 转载请保留原文链接及作者。