JavaUser
JavaUser

Reputation: 26364

two different synchronized methods of the same object?

I have 2 synchronized methods in a class say method1() and method2(). A thread say "Thread 1" holds the lock on that object of the class by executing the synchronized method1().Can another thread say "Thread 2" , access the lock via method2() at the same time while "Thread 1" holding the lock.

This case is analogs to java.util.Vector class having synchronized add() and remove() methods. Please explain this case too.

Upvotes: 9

Views: 3441

Answers (3)

objects
objects

Reputation: 8677

No, only one thread can hold the lock at one time

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/essential/concurrency/syncmeth.html

Upvotes: 0

whiskeysierra
whiskeysierra

Reputation: 5120

Thread2 can access the lock but can't enter the block guarded by that lock as long as Thread1 is holding the same lock.

Upvotes: 3

Borealid
Borealid

Reputation: 98509

No. A synchronized method in Java is identical to the whole method having its body wrapped in a synchronized (this) block. So if one thread is in a synchronized method, another thread cannot simultaneously be in a different synchronized method on the same object.

The way this relates to a Vector is that you don't want some code trying to remove an element while other code is trying to add an element. This is the concept of a critical section; you not only don't want someone else trying to do what you're doing, you also don't want someone else doing something different that would interfere.

Upvotes: 10

Related Questions