Когда следует использовать семафор в Java?

Каждый процесс в системе должен конкурировать за свою часть конечных ресурсов системы. Синхронизация процессов относится к практике обеспечения того, чтобы только один процесс использовал определенный ресурс в любой момент времени. Семафор Java — это средство языка для достижения синхронизации процессов. Semaphore в Java — это компонент синхронизации потоков, который защищает жизненно важные части и гарантирует, что между потоками не будут потеряны никакие сигналы. Семафор регулирует использование общих ресурсов, отслеживая отдельные запросы с помощью счетчиков.

Курс разработки Java для Android может улучшить ваши навыки.

Определение семафора в Java

В Java семафор — это переменная, используемая для управления многими одновременными задачами. Доступность системных ресурсов в данный момент представлена ​​этими неотрицательными переменными данными. Семафор регулирует доступ к общим ресурсам с помощью счетчиков, позволяя нескольким потокам работать параллельно, не вызывая ситуации гонки. Используя синхронизированные конструкции, семафор предотвращает повреждение жизненно важных частей системы.

Семафор может быть любого из двух типов:

1. Семафор-счетчик:

Количество доступных ресурсов хранится в переменной semaphore. Вызывается метод wait(), и значение семафора уменьшается на 1, когда процесс запрашивает доступ к общему ресурсу. Процессы используют сигнал () для освобождения ресурсов после того, как они больше не используются. К значению переменной добавляется дополнительная 1. Процесс должен ждать, пока ресурс станет доступным, когда значение семафора равно 0.

2. Последовательность битов в двоичном формате

Значение переменной в бинарном семафоре всегда будет либо 0, либо 1. Чтобы сделать общий ресурс доступным для другого процесса, вызывающий процесс просто вызывает метод wait(), который уменьшает значение с 1 до 0. Процессы используют signal() освобождать ресурсы после того, как они больше не используются. Значение переменной меняется с 0 на 1. Когда значение семафора равно 0, процесс, ожидающий получения общего ресурса, должен делать это до тех пор, пока удерживающий процесс не освободит его.

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

Как работает семафор?

  1. Счетчик семафора больше или равен нулю.
  2. После того, как значение счетчика становится больше нуля, потоку предоставляется доступ к ресурсу, а счетчик обнуляется.
  3. Если разрешение не может быть обеспечено, поток будет остановлен.
  4. Когда выполнение потока завершено, он освобождает все неиспользуемые ресурсы. Значение счетчика ресурса увеличивается на единицу при освобождении.
  5. Доступ к тому же ресурсу приложения был предоставлен другому потоку, который его ждал.
  6. Если счетчик равен нулю, вы не авторизованы для использования этого ресурса.

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

Внутренняя работа семафорных сигналов

  1. Если один поток хочет использовать общий ресурс, он может использовать семафор для связи с другим потоком, чтобы запросить разрешение на это.
  2. Если счетчик семафора больше нуля, потоку будет предоставлено разрешение, и счетчик семафора уменьшится.
  3. В случае неполучения разрешения обсуждение будет прекращено
  4. Когда потоку больше не требуется доступ к общему ресурсу для программирования, он отказывается от разрешения на использование этого ресурса. Это увеличит количество семафоров.
  5. Только другие потоки, которые в настоящее время находятся в состоянии ожидания разрешений, получат свои запросы.
  6. Поскольку в Java уже есть соответствующий класс Semaphore в пакете java.util.concurrent, вам не нужно разрабатывать собственные семафоры. Вместо этого вы можете просто использовать этот класс.

Полный курс для разработчиков Android и Java поможет вам лучше понять эту тему.