Kdy je synchronizace zbytečná

Nadbytečná synchronizace může zejména na moderních architekturách představovat zbytečnou zátěž navíc a zpomalení běhu aplikace. Proto bychom měli synchronizovat právě to, co je třeba. Co není třeba synchronizovat?

  • Při přístupu k nesdíleným proměnným a objektům (např. neviditelným z jiných vláken)

  • Při volání metod tříd, které jsou již synchronizované (vláknově bezpečná, thread-safe)

  • Při přístupu ke static final objektům (konstantám) od verze Java 5 výše

  • Při přístupu k lokálním proměnným - i proto bychom je měli používat všude tam, kde atributy nejsou nezbytně nutné! Lokální proměnné jsou uloženy na zásobníku vlákna. Ten patří právě jednomu vláknu a nejsou tedy sdíleny mezi více vlákny. Lokální proměnná nicméně může obsahovat referenci na objekt na haldě (prostoru dynamické paměti), který už může být sdílený. Nemusíme tedy synchronizovat manipulaci s hodnotou lokální proměnné, ale pro manipulaci s odkazovaným objektem už to platit nemusí!!!