друзья, подскажите при использовании Collections.synchronized расширения функции будут синхронны или нужно локать? функции типо isEmpty, forEach, etc...
Если вкратце - сами по себе расширения не будут дёргать внутренний лок, так что формально говоря они несинхронизированны.
Если чуть побольше - все функции расширения это набор одного или более родного метода исходного класса. Эти методы будут внутри синхронизированы, их совокупность - нет. forEach точно локать придётся (но там и родной iterator нужно локать по документации), условный isNotEmpty (isEmpty - родной метод) - уже сложнее, ибо под капотом мы вызовем например isEmpty синхронизированно, а затем просто перевернём результат, что не затрагивает коллекцию.