锁定/监视/关键部分扩展?

时间:2013-01-29 11:07:26

标签: java concurrency terminology critical-section

在子类或调用函数中扩展临界区时如何调用它?

假设class A已同步方法m1m2

class A {
 public synchronized void m1() {}
 public synchronized void m2() {}
}

class B extends A方法m3同时使用m1m2并同步

class B extends A {
 public synchronized void m3() { 
      ...
      m1();
      ...
      m2();
      ...
 }
}

如果m3希望在调用m1m2之间保持状态不变,则可能需要这样做。

问题在于术语。

它叫什么?

2 个答案:

答案 0 :(得分:1)

如果执行流程上存在锁定层次结构 - 层次结构中的锁定称为 嵌套锁定 。它们可以是重入的或不可重入的。

如果个别操作是线程安全的, m1() m2() ,在这种情况下,但是控制流取决于先前操作结果的操作序列可能会受到数据竞争的影响 - 它被称为 条件线程安全

答案 1 :(得分:0)

我确定,这种情况没有特殊用语。此外,我无法看到,您实际上在子类中扩展关键部分

我认为,这只是在子类" 中调用"在新方法中调用超类的方法。没有其他的。这不是同步。

<强> UPD:

实际上,你所做的就是这样的代码:

class B extends A {
 public void m3() { 
      synchronized (this) {
      ...
      synchronized (this) {
          //m1();
          ... m1 source...
      } 
      ...
      synchronized (this) {
          //m2();
          ... m2 source...
      } 
      ...
      }
 }
}

绝对等同于:

class B extends A {
 public void m3() { 
      synchronized (this) {
      ...
          //m1();
          ... m1 source...
      ...
          //m2();
          ... m2 source...
      ...
      }
 }
}

即。对同一对象上synchronized块内的同一对象进行内部同步 - 是不必要且毫无意义的事情。