В статье из документации Java8 https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html указано, что для синхронизации мы можем использовать 2 не связанных поля, потому что мониторы объектов этих полей будут разные (как я понял). Также там дается наставление: "" Убедиться, что объекты действительно не связаны, получается что объект не может быть один и тот же. В условиях задачи говорится в одном случае использовать значение хэшкода, а во втором номер элемента в массиве buckets, которое задается случайным образом! Получается 2 случайных числа. Но какие гарантии, что из массива locks будут выбраны именно 2 разных объекта при использовании 2 случайных чисел?