Question arises after reading this one. What is the difference between synchronized and unsynchronized objects? Why are unsynchronized objects perform better than synchronized ones?
What is the difference between Synchronized and Unsynchronized objects ? Why is Unsynchronized Objects perform better than Synchronized ones ?
HashTable
is considered synchronized because its methods are marked as synchronized
. Whenever a thread enters a synchronized
method or a synchronized
block it has to first get exclusive control over the monitor associated with the object instance being synchronized on. If another thread is already in a synchronized
block on the same object then this will cause the thread to block which is a performance penalty as others have mentioned.
However, the synchronized
block also does memory synchronization before and after which has memory cache implications and also restricts code reordering/optimization both of which have significant performance implications. So even if you have a single thread calling entering the synchronized
block (i.e. no blocking) it will run slower than none.
One of the real performance improvements with threaded programs is realized because of separate CPU high-speed memory caches. When a threaded program does memory synchronization, the blocks of cached memory that have been updated need to be written to main memory and any updates made to main memory will invalidate local cached memory. By synchronizing more, again even in a single threaded program, you will see a performance hit.
As an aside, HashTable
is an older class. If you want a reentrant Map
then ConcurrentHashMap
should be used.
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