相关疑难解决方法(0)

覆盖Java中的同步方法

假设我在某个类上有一个synchronized方法:

abstract class Foo {
    public synchronized void foo() {  // synchronized!
        // ...
    };
}
Run Code Online (Sandbox Code Playgroud)

并且我在使用synchronized修饰符的情况下覆盖它:

class Bar extends Foo {
    @Override
    public void foo() {               // NOT synchronized!
        super.foo();
        // ...
    }
 }
Run Code Online (Sandbox Code Playgroud)

关于这种情况,我有几个具体的问题:

  1. 被覆盖的方法也会被隐式同步吗?
  2. 如果没有,super-call会同步吗?
  3. 如果没有super-call,是否会同步?
  4. 有没有办法强制使用重写方法synchronized(我注意到接口内的抽象方法定义或方法定义不允许使用synchronized关键字)?

java overriding synchronized

45
推荐指数
2
解决办法
8624
查看次数

Java:超类中的synchronized方法获取与子类中的同一个锁,对吧?

class A {
    public synchronized void myOneMethod() {
        // ...
    }
}

class B extends A {
    public synchronized void myOtherMethod() {
        // ...
    }
}

// ...

B myObject;

// ...

myObject.myOneMethod(); // acquires lock
myObject.myOtherMethod(); // same lock?
Run Code Online (Sandbox Code Playgroud)

我如何理解同步模型,我会说是的,确实如此,因为锁/监视器与实例myObject相关联,并且定义方法的位置并不重要.但我是对的吗?如果没有,为什么?如果是的话,你为什么确定,我不是?:-)

java concurrency

17
推荐指数
2
解决办法
4544
查看次数

标签 统计

java ×2

concurrency ×1

overriding ×1

synchronized ×1