我有一个类似于以下
的大型对象ArrayListclass Entry {
private String variable1 = null;
private int variable2 = 0;
public Entry (String variable1) {
this.variable1 = variable1;
}
/* getters and setters for variable1 and 2 are below */
}
我在ArrayList中启动对象,然后创建多个线程。每个线程搜索大量文档以确定variable1的内容是否嵌入在文档中。如果是,我想制作一个特定于该主题的条目的副本,类似于下面的内容:
public Entry(Entry entry) {
this(entry.getVariable1())
}
然后我想改变Copy而不是原始的variable2的内容。总结一下:
以下是我的问题。
答案 0 :(得分:5)
如果您复制存储在只读共享数组中的对象,则不需要同步getter / setter。
只要列表是只读
答案 1 :(得分:1)
我会有一个阴影原始列表的集合,每个线程都有一个本地副本。
public class ShadowList<T> {
private final List<T> original;
private final List<T> local;
public ShadowList(List<T> original) {
this.original = original;
local = Arrays.<T>asList((T[]) new Object[original.size()]);
}
public T get(int n) {
T t = local.get(n);
if (t == null)
t = original.get(n);
return t;
}
public void set(int n, T t) {
local.set(n, t);
}
}