0

例如,

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;
        }
    }
}
4

2 回答 2

3

这取决于 - 您希望这两个对象共享一个互斥锁(实际上是一个浅拷贝)还是希望它们独立?在大多数情况下,我希望是后者,在这种情况下,您不想复制参考。

于 2012-07-09T18:50:08.787 回答
1

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

  1. 制作互斥锁final
  2. 不复制互斥锁
  3. 在复制期间锁定原始实例的互斥锁。
于 2012-07-09T18:51:15.560 回答