复制构造函数是否需要复制互斥锁?

时间:2012-07-09 18:47:22

标签: java mutex copy-constructor

例如,

public Foo{
    private Object mutex = new Object();
    private int bar;

    public Foo(Foo f){
        this.mutex = f.getMutex();
        this.bar = f.getBar();
    }

    public Object getMutex(){
        return mutex;
    }

    public void setBar(int bar){
        synchronized(mutex){
            this.bar = bar;
        }
    }

    public int getBar(){
        synchronized(mutex){
            return bar;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

这取决于 - 你想要这两个对象共享一个互斥体(真正的浅拷贝)还是你想让它们独立?在大多数情况下,我会期待后者,在这种情况下,不会想要复制引用。

答案 1 :(得分:1)

在这种情况下,应该执行以下所有操作:

  1. 制作互斥final
  2. 不复制互斥锁
  3. 在复制期间锁定原始实例的互斥锁。