Когда мы говорим о потокобезопасности, мы выбираем метод блокировки для ее решения. Типы блокировок в Java делятся на шесть типов. Два наиболее распространенных метода блокировки, с которыми мы столкнулись, — это блокировка и синхронизация. Это также наиболее часто задаваемый вопрос о принципах и механизмах на собеседованиях. Ниже мы покажем вам распространенные вопросы на собеседованиях по Java. Давайте посмотрим, сможете ли вы ответить на них.
1. Разница между синхронизированными эффектами статических и нестатических методов.
Нестатические методы:
Заблокировать объект (можно понимать как блокировку памяти этого объекта. Обратите внимание, что это только эта память, другие подобные объекты будут иметь свои собственные блокировки памяти. При этом метод синхронизации объекта выполняется более чем в одном). другой поток (примечание: это объект) будет генерировать взаимное исключение
Статический метод : эквивалент блокировки класса (*.class находится в области кода, а статический метод находится в статической области. Объекты, сгенерированные этим классом, используют этот статический метод, поэтому N объектов конкурируют за эту память),
В это время , пока вызывается объект, сгенерированный этим классом, при вызове этого статического метода будет происходить взаимное исключение. То есть все объекты этого класса имеют общую блокировку.
2.Какие типы замков?
(1) Оптимистическая блокировка и пессимистическая блокировка
(2) Блокировка вращения и блокировка без вращения
(3) Повторный замок и невозвратный замок
(4) Беззамковый и легкий замок, смещенный замок и тяжелый замок
(5) Блокировка мьютекса и общая блокировка
(6) Честная блокировка и несправедливая блокировка
3. Несколько методов синхронизации потоков
синхронизированная модификация
Летучий реализует синхронизацию (гарантируется только видимость, а не атомарность)
Используйте локальную переменную ThreadLocal
Используйте атомарные классы ( AtomicInteger, AtomicBoolean...)
Использовать блокировку
Используйте класс контейнера ( BlockingQueue, ConcurrentHashMap)
4. Разница между синхронизированным и стопорным механизмами
Synchronized изначально использовал механизм пессимистической блокировки ЦП, то есть поток получал монопольную блокировку. Эксклюзивная блокировка означает, что другие потоки могут полагаться только на блокировку, ожидая, пока поток снимет блокировку.
Lock использует оптимистическую блокировку. Так называемая оптимистическая блокировка заключается в том, чтобы завершить операцию каждый раз без блокировки, но при условии отсутствия конфликта. Если операция завершается неудачно из-за конфликта, она будет повторяться до тех пор, пока не завершится успешно. Механизмом реализации оптимистической блокировки является операция CAS (Сравнение и замена).
5. Поговорите о проблемах потокобезопасности
Потокобезопасность — это проблема в области многопоточности. Потокобезопасность можно просто понимать как метод или экземпляр, который можно без проблем использовать в многопоточной среде.
В многопоточном программировании на Java предусмотрено несколько способов обеспечения безопасности потоков Java:
Самый простой способ — использовать ключевое слово Synchronization.
Используйте атомарные классы из пакета java.util.concurrent.atomic, например AtomicInteger.
Использование блокировок из пакета java.util.concurrent.locks
Используйте потокобезопасную коллекцию ConcurrentHashMap.
Используйте ключевое слово Volatible, чтобы обеспечить видимость переменных.
Вышеупомянутое представляет собой введение в вопросы собеседования о блокировках в Java. Что касается вопросов знаний, которые вам не ясны, вы должны вовремя найти информацию, чтобы решить их и укрепить свою память о содержании блокировок.