Вопросы, которые необходимо задать для параллельных собеседований: Что такое AQS. Эта статья поможет вам полностью разобраться в этом!
Вопросы, которые необходимо задать для параллельных собеседований: Что такое AQS. Эта статья поможет вам полностью разобраться в этом!

существовать Java В параллельном программировании AbstractQueuedSynchronizer (AQS) является очень важным компонентом. АКС да JDK Обеспечивает основу для реализации FIFO(First In, First Out)очередь блокировка ожидания исинхронная, напр. ReentrantLock、Semaphore、CountDownLatch ждать. В этой статье будет представлен углубленный анализ с разных точек зрения. AQS принцип работыисуществоватьодновременно Программирование Приложение。

1. Что такое AQS?

Обзор AQS

AQS даа базовая структура для создания замков исинхронна, она использует принцип «первым пришел — первым вышел» ожидания Управление несколькиминитьизсинхронныйдействовать。AQS Предоставляются следующие основные функции:

  • Управление статусом ресурса:проходитьцелочисленное представление Статус синхронизации, подклассы могут определять значение и режим работы этого состояния.
  • Управление очередью потоков:проходить FIFO очередь Ожидания Управляйте конкуренцией и ждите нескольких нить.
  • предоставлен шаблон метод:AQS Предлагает ассортимент шаблонного метод, подклассы могут применять эти методы для определения конкретных синхронных механизмов.

Концепция дизайна AQS

AQS изконцепция Воля в дизайне Статус синхронизацииинитьочередьиз Абстрактная логика управления,Чтобы разные типы реализателей синхронного кода могли повторно использовать эту логику. так,Разработчики могут сосредоточиться на реализации конкретной синхронной логики процессора.,Нет необходимости заботиться об основных деталях управления очередями и статусами.

2.АКС принцип работы

Статус синхронизации

AQS использовать volatile Целочисленная переменная типа (состояния), представляющая Статус синхронизация. Это состояние может определяться подклассами, например:

  • Для эксклюзивной блокировки состояние представляет состояние удержания блокировки (0 означает отсутствие удержания, 1 означает удержание).
  • Для общих блокировок состояние представляет собой количество блокировок чтения, удерживаемых в данный момент.

AQS Предоставляет ряд методов для управления Статусом. синхронизации,нравиться getState()、setState(int newState) и CompareAndSetState(int ожидаемое, int обновление)。

очередь ожидания

AQS использовать FIFO очередь ожидания управлять нитью в состоянии ожидания. Когда нить запрос не может получить Статус синхронизациичас,Будет добавлена ​​очередь ожидания. очередь ожидания реализуется двусвязным списком,Каждый узел (Node) представляет собой ожидающую нить.

шаблонный метод

AQS Предоставляются следующие шаблоны метод, подклассы могут переопределять эти методы для реализации конкретной синхронной логики:

  • tryAcquire(int arg): Попробуйте получить Статус синхронизация. В эксклюзивном режиме, если приобретение прошло успешно, верните правда, иначе возврат false。
  • tryRelease(int arg): Попробуй отпустить Статус синхронизация. Для эксклюзивного режима, если выпуск успешен, верните правда, иначе возврат false。
  • tryAcquireShared(int arg): Попробуйте получить Статус в общем режиме. синхронизация. В случае успеха верните значение, большее или равное 0 значение, в противном случае возвращает значение меньше, чем 0 ценить.
  • tryReleaseShared(int arg): Попробуйте выпустить Статус в общем режиме. синхронизация. Возврат в случае успешного выпуска правда, иначе возврат false。

3.АКС Приложение

ReentrantLock

ReentrantLock даа тип на основе AQS Реализована реентерабельная эксклюзивная блокировка. Имеет два режима: честный режими Нетчестный режим。

честный режим

честный режим Вниз,ReentrantLock Блокировки приобретаются в запрошенном порядке. Конкретная реализациядасуществовать tryAcquire Метод регистрации в свою очередь ожиданиясерединаизузел-предшественник,Если узла-предшественника нет или узел-предшественник был разбужен,Затем попытайтесь получить замок.

Нетчестный режим

Нетчестный режим Вниз,ReentrantLock Нет никакой гарантии, что блокировки будут получены в запрошенном порядке, и да пытается получить блокировки напрямую. Если не удалось, введите еще раз ожидания。

Semaphore

Semaphore даа тип на основе AQS Реализован счетный семафор для контроля количества обращений к ресурсу. Он может существовать в эксклюзивном режиме и в общем режиме использования.

существоватьэксклюзивный режим Вниз,Semaphore Разрешает нит получить доступ к ресурсу. существуют режим совместного использования, Семафор Позволяет нескольким потокам одновременно получать доступ к ресурсам, и его основная логика проходит tryAcquireShared и tryReleaseShared реализация метода.

CountDownLatch

CountDownLatch даа тип на основе AQS Реализовано средство синхронизации, которое позволяет одному или нескольким потокам ожидать завершения набора операций. Обратный отсчет Защелка Эта функция реализуется посредством счетчика. Каждый раз, когда операция завершается, счетчик уменьшается. 1, когда счетчик уменьшится до 0 Когда все ожидающие потоки пробуждаются.

CountDownLatch В основном используется AQS режим обмена, через tryAcquireShared Метод определения того, является ли счетчик да 0, если да, получи Статус синхронизации,В противном случае введите очередь ожидания。

4. АКС Преимущества

Высокая масштабируемость

AQS Предоставляет набор универсальных Статусов. управление синхронизацией инициировать механизм очередей, разработчики могут расширить AQS Реализуйте различные сложные синхронизаторы. АКС Его конструкция делает его легко масштабируемым и может адаптироваться к различным потребностям параллельного программирования.

надежность и производительность

AQS использовать Операция CAS (Compare-And-Swap) для управления Статусом синхронизация, обеспечивающая атомарность и безопасность операции. В то же время АКС изочередь Механизм ожидания снижает конкуренцию и одновременно повышает производительность.

Упрощение разработки

проходить AQS,Разработчики могут сосредоточиться на конкретной логической реализации синхронного реализатора.,Нет необходимости заботиться об основных деталях управления очередями и статусами. Это значительно упрощает процесс разработки синхронного,Повышенная эффективность разработки.

обсуждать

AQS как Java одновременно является важным краеугольным камнем программирования, а его дизайнерские идеи и детали реализации достойны углубленного изучения. понимать AQS принцип работы, может помочь нам лучше использовать расширение Java Инструменты параллелизма для написания эффективных и надежных параллельных программ.

обсуждатьтема:

  1. Какие из ваших реальных проектов вы испытали на основе AQS синхронный инструмент? Какую проблему они существуют решают?
  2. тыда Вы когда-нибудь сталкивались AQS узкое место в производительности? Как это решить?
  3. Для начинающих: как эффективно учиться и освоить AQS использовать расширение?

Добро пожаловать, чтобы поделиться своим опытом и мнениями в области комментариев, давайте обсудим это вместе. AQS Дополнительные сценарии применения и советы по оптимизации.

boy illustration
Как использовать ArrayPool
boy illustration
Интегрируйте iText в Spring Boot для реализации замены контента на основе шаблонов PDF.
boy illustration
Redis реализует очередь задержки на основе zset
boy illustration
Получить текущий пакет jar. path_java получает файл jar.
boy illustration
Краткое обсуждение высокопроизводительного шлюза Apache ShenYu
boy illustration
Если вы этого не понимаете, то на собеседовании даже не осмелитесь сказать, что знакомы с Redis.
boy illustration
elasticsearch медленный запрос, устранение неполадок записи, запрос с подстановочными знаками
boy illustration
По какому стандарту взимается плата за обслуживание программного обеспечения?
boy illustration
IP-адрес Получить
boy illustration
【Java】Решено: org.springframework.web.HttpRequestMethodNotSupportedException
boy illustration
Native js отправляет запрос на публикацию_javascript отправляет запрос на публикацию
boy illustration
.net PDF в Word_pdf в Word
boy illustration
[Пул потоков] Как Springboot использует пул потоков
boy illustration
Подробное объяснение в одной статье: Как работают пулы потоков
boy illustration
Серия SpringCloud (6) | Поговорим о балансировке нагрузки
boy illustration
IDEA Maven может упаковать все импортное полностью красное решение — универсальное решение.
boy illustration
Последний выпуск 2023 года, самое полное руководство по обучению Spring Boot во всей сети (с интеллект-картой).
boy illustration
[Решено — Практическая работа] SaTokenException: запрос не может быть получен в контексте, отличном от Интернета. Решение проблем — Практическая работа.
boy illustration
HikariPool-1 - Connection is not available, request timed out after 30000ms
boy illustration
Power Query: автоматическое суммирование ежемесячных данных с обновлением одним щелчком мыши.
boy illustration
установка Ubuntu в среде npm
boy illustration
3 Бесплатные системы управления складом (WMS) .NET с открытым исходным кодом
boy illustration
Глубокое погружение в библиотеку Python Lassie: мощный инструмент для автоматизации извлечения метаданных
boy illustration
Объяснение прослушивателя серии Activiti7 последней версии 2023 года
boy illustration
API-интерфейс Jitu Express для электронных счетов-Express Bird [просто для понимания]
boy illustration
Каковы архитектуры микросервисов Java. Серверная часть плавающей области обслуживания
boy illustration
Описание трех режимов жизненного цикла службы внедрения зависимостей Asp.net Core.
boy illustration
Java реализует пользовательские аннотации для доступа к интерфейсу без проверки токена.
boy illustration
Серверная часть Unity добавляет поддержку .net 8. Я еще думал об этом два дня назад, и это сбылось.
boy illustration
Проект с открытым исходным кодом | Самый элегантный метод подписки на публичные аккаунты WeChat на данный момент