Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Какие механизмы синхронизации можно использовать, кроме synchronized и Atomic?
ReentrantLock — гибкая блокировка с таймаутами.
Semaphore — ограничение доступа к ресурсу.
CountDownLatch — ожидание завершения N операций.
CyclicBarrier — синхронизация потоков в точке.
Отличие Atomic-классов от synchronized
Atomic-классы (например, AtomicInteger) используют CAS (Compare-And-Swap) для атомарных операций без блокировок. synchronized блокирует весь объект. Atomic не подходит для составных операций (например, check-then-act).
Параллелизм в ConcurrentHashMap vs Collections.synchronizedMap
ConcurrentHashMap делит данные на сегменты (бакеты), позволяя параллельно писать в разные сегменты. Collections.synchronizedMap блокирует всю коллекцию на каждую операцию. Это делает ConcurrentHashMap быстрее в многопоточной среде.
Какие примитивы синхронизации (synchronized, Atomic, семафоры) вы использовали?
synchronized – для блокировки доступа к общему ресурсу.
Atomic-классы – для атомарных операций (например, AtomicInteger).
Семафоры (Semaphore) – для ограничения доступа к ресурсу с заданным числом потоков.
Когда synchronized недостаточно для предотвращения гонки потоков?
synchronized не подходит, если:
Нужна неблокирующая синхронизация (например, Atomic).
Требуется ожидание условий (используйте wait()/notify() или ReentrantLock).
Есть риск deadlock из-за вложенных блокировок.
Что делает ключевое слово synchronized?
Можно ли получить доступ к критической секции из нескольких потоков при использовании synchronized?
Можно ли вызывать wait() и notify() вне synchronized-блока и почему?
Чем wait/notify отличаются от использования synchronized на более высоком уровне?
Для чего нужно ключевое слово synchronized?
Рейтинг:
2
Сложность:
7
synchronized блокирует доступ к коду или объекту для других потоков, пока текущий поток не завершит выполнение. Это предотвращает гонки данных (race conditions) и обеспечивает потокобезопасность.
Рейтинг:
2
Сложность:
7
Нет, synchronized гарантирует, что только один поток может находиться в критической секции в любой момент времени. Остальные потоки блокируются до освобождения монитора.
Рейтинг:
5
Сложность:
5
Нет, вызывать wait() и notify() вне synchronized-блока нельзя.
Если попытаться это сделать, будет выброшено IllegalMonitorStateException.
Это связано с тем, что данные методы работают только с монитором объекта.
Поток должен владеть монитором, чтобы управлять ожиданием других потоков.
Так Java защищает модель синхронизации от ошибок.
Рейтинг:
4
Сложность:
7
wait/notify — это низкоуровневый механизм координации потоков.synchronized сам по себе отвечает только за взаимное исключение.wait/notify позволяют потокам ожидать выполнения условий.
На более высоком уровне чаще используют Lock, Condition, Semaphore и другие абстракции.
Они проще в использовании и безопаснее.
Рейтинг:
5
Сложность:
6
synchronized обеспечивает взаимное исключение при доступе к общему ресурсу. Он гарантирует, что только один поток в момент времени выполняет защищённый код. Также synchronized обеспечивает корректную видимость изменений между потоками. Это базовый и надёжный механизм синхронизации в Java. Он работает на основе монитора объекта.
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
5
Рейтинг:
2
Сложность:
4