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.
There are two types of thread synchronization mutual exclusive and inter-thread communication. Synchronized method. Synchronized block.
Indeed, it is not possible! Hence, multiple threads will not able to run any number of synchronized methods on the same object simultaneously. Save this answer.
So can two threads access a synchronized method at the same time? Yes, if the method is called on different instances of the class.
Can two threads call two different synchronized instance methods of an Object? No. If a object has synchronized instance methods then the Object itself is used a lock object for controlling the synchronization. Therefore all other instance methods need to wait until previous method call is completed.
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.
Thread2 can access the lock but can't enter the block guarded by that lock as long as Thread1 is holding the same lock.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With