【问题标题】:Does copy constructor need to copy mutexes?复制构造函数是否需要复制互斥体?
【发布时间】:2012-07-09 18:47:22
【问题描述】:

例如,

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

【问题讨论】:

  • f (f.getMutex()) 是什么?
  • 取决于您希望类的行为方式,但绝对要使互斥数据成员成为最终成员。

标签: java mutex copy-constructor


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      相关资源
      最近更新 更多