Ну, во-первых, классы Atomic используют блокировку (через синхронизированные и изменчивые ключевые слова) так же, как если бы вы делали это вручную.
Во-вторых, неизменяемость отлично работает для многопоточности, вам больше не нужны блокировки монитора и тому подобное, но это потому, что вы можете только читать свои неизменяемые объекты, вы можете изменять их.Избавьтесь от синхронизированного / изменчивого, если вы хотите избежать состояния гонки в многопоточной Java-программе (то есть, если несколько потоков будут считывать и записывать одни и те же данные).Лучше всего, если вам нужна более высокая производительность, избегать хотя бы некоторых встроенных потоковобезопасных классов, которые делают своего рода более общую блокировку, и создавать собственную реализацию, которая более привязана к вашему контексту и, таким образом, может позволить вамиспользуйте более гранулярную синхронизацию и захват блокировки.
Проверьте эту реализацию BlockingCache, выполненную ребятами из Ehcache;
http://www.massapi.com/source/ehcache-2.4.3/src/net/sf/ehcache/constructs/blocking/BlockingCache.java.html