when multiple threads want to call the inner class method will they acquire a lock for the outer class object
No.
or for the inner class object
Yes.
and how does one modify the statement so that I synchronize access to the outer class object/
Add:
synchronized (OuterClass.this)
{
}
inside the method, but note that the inner lock is acquired before the outer lock, as the syntax should now suggest. A consistent locking order is essential to prevent deadlocks. You might prefer to acquire the outer lock first, in which case you should do this:
public void methodA()
{
synchronized(OuterClass.this)
{
synchronized (this)
{
// ...
}
}
}
without a synchronized
declaration on the method itself. Or if you only want the outer lock, do this:
public void methodA()
{
synchronized(OuterClass.this)
{
// ...
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…