假设我使用如下代码:
public class MyObject {
private int id;
private ArrayList<MyObject> otherObjects;
public MyObject(int id) {
this.id = id;
ArrayList<MyObject> otherObjects = new ArrayList<MyObject>();
otherObjects.add(new MyObject(id + 1));
this.otherObjects = otherObjects;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public ArrayList<MyObject> getOtherObjects() {
return otherObjects;
}
public void setOtherObjects(ArrayList<MyObject> otherObjects) {
this.otherObjects = otherObjects;
}
}
我应该注意哪些陷阱?我的另一个问题是,如果我可以制作这个Parcellable类?
答案 0 :(得分:4)
如果您使用不同的线程运行它,那么您将拥有数据竞争,因为您没有锁定全局变量。
答案 1 :(得分:1)
添加到 Mathew Palsberg 所说的
ArrayList 是不同步的,因此它们不是线程安全的。
请注意,此实现未同步。 如果是多个线程 同时访问一个ArrayList实例,并且至少有一个 线程在结构上修改列表,必须同步 外部即可。 (结构修改是添加或的任何操作 删除一个或多个元素,或显式调整后备数组的大小; 仅设置元素的值不是结构 修改。)这通常通过同步一些来完成 自然封装列表的对象。如果不存在这样的对象, 列表应该使用Collections.synchronizedList“包装” 方法。 这最好在创建时完成,以防止意外 对列表的不同步访问:
列表list = Collections.synchronizedList(new ArrayList(...));
来源:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html