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

2 つのオブジェクトでミューテックス (実際には浅いコピー) を共有するか、それとも独立させたいによって異なります。ほとんどの場合、後者を期待します。その場合、参照をコピーしたくないでしょう。

于 2012-07-09T18:50:08.787 に答える
1

この場合、次のすべてを実行する必要があります。

  1. ミューテックスを作るfinal
  2. ミューテックスをコピーしない
  3. コピー中に元のインスタンスのミューテックスをロックします。
于 2012-07-09T18:51:15.560 に答える