我正在上课,我需要在两个方法之间进行同步" insert"和" getItems"对于我的用例。虽然在我看来,按照下面的代码使用这两种方法不会产生任何副作用: -
public class EmailBuffer {
private List<String> items = new ArrayList<String>();
public void insertItem(String item) {
synchronized (items) {
items.add(item);
}
}
public String[] getItems() {
synchronized (items) {
String[] objects = new String[items.size()];
items.toArray(objects);
items.clear();
return objects;
}
}
}
但如果使用上述代码会有任何副作用,有人可以帮助我吗? 或者,我可以创建另一个实例变量 private Object object = new Object();并且可以在&#34;插入&#34;中的同步块中使用它。和&#34; getItems&#34;方法,但这样,如果上面的代码根本没有任何问题,我将引入一个根本不需要的额外实例变量。
答案 0 :(得分:1)
只要您没有暴露items
,就不会有任何意外的副作用。您的代码应该按预期工作。