在synchronized块中使用工作实例对象的任何副作用

时间:2015-11-02 11:03:01

标签: java

我正在上课,我需要在两个方法之间进行同步" 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;方法,但这样,如果上面的代码根本没有任何问题,我将引入一个根本不需要的额外实例变量。

1 个答案:

答案 0 :(得分:1)

只要您没有暴露items,就不会有任何意外的副作用。您的代码应该按预期工作。