Don Woodward
Don Woodward

Reputation: 131

Instance method Synchronization in JAVA

Suppose there are TWO Threads A and B . There is one object which has 2 synchronized methods dothisOne and dothisTwo which should get executed in the order (dothisOne--->dothisTwo) in the calling program. Both the threads have to follow the same calling sequence(dothisOne--->dothisTwo) . Suppose both start fresh and first thread A locks the object while performing dothisOne. Once it finishes dothisOne and control comes out ...Are there chances of ThreadB starting dothisOne (or) is it 100% guarenteed that thread A will go for dothisTwo ? This question is related to instance method . If it was class method(static), I believe threadA would go for dothisTwo

Upvotes: 0

Views: 298

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1499810

Are there chances of ThreadB starting dothisOne (or) is it 100% guarenteed that thread A will go for dothisTwo ?

No guarantees at all. I suspect it's more likely that thread A will get to go into doThisTwo instead, because basically there's nothing it needs to do between exiting the monitor and re-entering it - it doesn't need to be rescheduled or anything. But no, it can happen either way.

If it was class method(static), I believe threadA would go for dothisTwo

Nope - synchronization doesn't care about instance methods vs static methods. Static and instance synchronized methods differ in which monitor they implicitly synchronize against, but that's all.

Basically, if you want two things to happen as a unit (in terms of synchronization), you need to synchronize around the pair of operations, rather than just each operation in turn.

Upvotes: 3

Related Questions