Reputation: 26364
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
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
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
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