я не об этом. Стейт - это множество var-ов, которые могут содержать данные или Deferred для данных, если какой-то асинхронный процесс еще не завершился
все эти вары защищены synchronized на единственном мьютексе. мьютекс один, код, защищенный мьютексом, только меняет стейт и стартует новые Deferred.