3
votes

If base class A has a "public synchronized void method(){}" which was not overridden by its derived class B,then what will the lock be (i.e. will it be the derived class object or the base class object) that is used to access the synchronized method in class B?

2
This is not a static method, is it? - Sergey Kalinichenko
No.Not even block synchronized like synchronized(A.class) or synchronized(getClass()) or synchronized(Class.forName("A")) - Sameer Sarmah

2 Answers

4
votes

There is no "base class object".

synchronized methods lock on the instance they're called on.

0
votes
public synchronized void method() {  
    ...
};

is just the same as

public void method() {  
    synchronized(this){
        ...
    }
};

And for a super-method this means an object of class B. So the lock will be on an instance of the object B.