Что такое семафор в Java и как его использовать?

Опубликовано: 2022-05-26

В 1995 году Sun Microsystems представила нам Java, язык программирования для совместной работы, зависящий от классов и объектов, и компьютерную платформу. Огромное количество программ и веб-сайтов не будут работать, если у вас не установлена ​​Java, и ежедневно разрабатываются новые. Java продается и хвалят за высокую скорость, безопасность и надежность. Это компьютерный язык, созданный специально для использования в рассредоточенном мире Интернета. Он был создан с учетом дизайна языка программирования C++, но он проще в использовании и реализует объектно-ориентированный подход к программированию.

Программа Executive PG в области разработки программного обеспечения научит вас всем навыкам, необходимым для достижения успеха в Java.

Пример семафора:

Общий переменный мьютекс: семафор = 1;

Процесс я

начинать

.

.

П (мьютекс);

выполнить КС;

В (мьютекс);

.

.

Конец;

Оглавление

Что выделяет Java?

Преданное сообщество Java-разработчиков, архитекторов и энтузиастов протестировало, усовершенствовало, расширило и утвердило Java. Несмотря на почти двухдесятилетнюю историю Java, она неуклонно развивалась на протяжении многих лет.

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

Что такое семафор в Java?

Семафор использует счетчик для регулирования доступа к общему ресурсу. Доступ разрешен, если значение счетчика больше нуля. Если значение равно 0, доступ запрещен. Счетчик считает разрешения, предоставляющие доступ к общему ресурсу. В результате, чтобы получить доступ к ресурсу, поток должен сначала получить разрешение от семафора.

Как это работает?

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

Когда потоку больше не требуется доступ к общему ресурсу, он освобождает разрешение, вызывая увеличение счетчика семафоров. Если другой поток ожидает разрешения, этот поток получит его в этот момент.

Типы семафоров

В java есть четыре типа семафоров. Они следующие:

Двоичный семафор :

Бинарный семафор принимает только 0 и 1 в качестве значений и используется для создания взаимного исключения и синхронизации параллельных действий.

Пример двоичного семафора:

открытый класс BinarySemaphoreExample

{

частное логическое значение заблокировано = ложь;

Двоичный семафор (начальный интервал)

{

заблокирован = (начальный == 0);

}

общедоступная синхронизированная пустота waitForNotify() выдает InterruptedException

{

пока (заблокировано)

{

ждать();

}

заблокирован = истина;

}

общедоступный синхронизированный void notifyToWakeup()

{

если (заблокировано)

{

уведомлять();

}

заблокирован = ложь;

}

}

Прочтите наши популярные статьи, связанные с разработкой программного обеспечения

Как реализовать абстракцию данных в Java? Что такое внутренний класс в Java? Идентификаторы Java: определение, синтаксис и примеры
Понимание инкапсуляции в ООП на примерах Объяснение аргументов командной строки в C 10 основных функций и характеристик облачных вычислений в 2022 году
Полиморфизм в Java: концепции, типы, характеристики и примеры Пакеты в Java и как их использовать? Учебник по Git для начинающих: Изучайте Git с нуля

Счетный семафор :

В каждый момент времени значение семафора-счетчика представляет собой максимальное количество процессов, которые могут получить доступ к критической области одновременно.

Пример подсчета семафора:

открытый класс CountingSemaphoreExample

{

частный сигнал int = 0;

публичная синхронизированная пустота take()

{

этот.сигнал++;

это.уведомить();

}

публичный синхронизированный void release() выдает InterruptedException

{

в то время как (этот сигнал == 0)

ждать();

этот.сигнал–;

}

}

Временный семафор:

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

Пример временного семафора:

класс TimedSemaphoresExample

{

частный семафор TimedSemaphore;

TimedSemaphoreExample (длинный период, интервал слотов)

{

семафор = новый TimedSemaphore (период, TimeUnit.SECONDS, slotLimit);

}

логическое значение tryAdd()

{

вернуть семафор.tryAcquire();

}

int доступные слоты ()

{

вернуть семафор.getAvailablePermits();

}

}

Ограниченный семафор :

Мы можем установить верхний предел, используя ограниченные семафоры. Он используется вместо подсчета семафоров, поскольку они не имеют значения верхней границы. Значение верхней границы представляет собой максимальное количество сигналов, которые могут быть сохранены.

Пример ограниченного семафора :

открытый класс BoundedSemaphoresExample

{

частные целые сигналы = 0;

частный интервал = 0;

public BoundedSemaphoreexample(int upperBound)

{

this.bound = верхняя граница;

}

public void синхронизированный take() выдает InterruptedException

{

в то время как (this.signals == привязано)

ждать();

это.сигналы++;

это.уведомить++;

}

public void синхронизированный выпуск() выдает InterruptedException

{

в то время как (этот сигнал == 0)

ждать();

это.сигналы–;

}

}

Изучите наши популярные курсы по программной инженерии

Сл. Нет Программы разработки программного обеспечения
1 Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
2 Учебный курс по полной разработке стека Программа PG в блокчейне
3 Программа Executive Post Graduate Program в области разработки программного обеспечения - специализация в DevOps Просмотреть все курсы по программной инженерии

Характеристики:

Семафор имеет следующие характеристики:

  • Он позволяет потокам взаимодействовать друг с другом.
  • Это снижает степень синхронности. В результате он обеспечивает низкоуровневый метод синхронизации.
  • В семафоре нет отрицательного значения. Его значение может быть больше или равно нулю.
  • Мы можем реализовать семафор, используя тестовую операцию и прерывания, и выполнить его, используя файловые дескрипторы.

Плюсы и минусы семафоров:

Преимущества:

  1. Это позволяет многим потокам достигать жизненно важной части.
  2. Семафоры не зависят от машины.
  3. Семафоры реализованы в машинно-независимом коде микроядра.
  4. Множественным процессам не разрешен доступ к критической секции.
  5. Нет потери времени или ресурсов процесса, поскольку в семафоре всегда есть занятое ожидание.
  6. Они машинно-независимы и поэтому должны выполняться в машинно-независимом коде микроядра.
  7. Они обеспечивают адаптивное управление ресурсами.

Недостатки:

  1. Инверсия приоритета — одно из наиболее существенных ограничений семафора.
  2. Операционная система должна отслеживать все вызовы семафоров ожидания и сигнализации.
  3. Их использование никогда не обязательно, а просто по традиции.
  4. Действия ожидания и сигнала должны выполняться правильно, чтобы избежать взаимоблокировок в семафоре.
  5. Поскольку программирование семафоров сложно, существует вероятность того, что взаимное исключение не может быть достигнуто.
  6. Это также нереалистичная стратегия для крупномасштабных приложений, поскольку она приводит к потере модульности.
  7. Семафор более подвержен ошибкам программирования.
  8. Ошибка программирования может привести к взаимоблокировке или нарушению взаимного исключения.

Как использовать семафор в качестве блокировки?

Семафор можно использовать в качестве блокировки в Java. Это означает, что он ограничивает доступ к ресурсу. Чтобы получить блокировку, любой поток, который хочет получить доступ к заблокированному ресурсу, должен сначала вызвать функциюAcquire(). После завершения работы поток должен снять блокировку, вызвав функцию release(). Имейте в виду, что верхняя граница должна быть установлена ​​на 1. Курс Executive PG по разработке полного стека поможет вам овладеть всеми этими навыками.

Резюме

Четкое представление о таких языках программирования, как Java, необходимо для успешной карьеры разработчика программного обеспечения. upGrad предлагает несколько курсов, которые могут дать вам правильный толчок к многообещающей карьере. Специализация в разработке полного стека от Purude University в upGrad научит вас всем навыкам, необходимым для процветания в области разработки программного обеспечения.

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Зачем нам нужен семафор в Java?

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

Зачем нам нужен счетный семафор?

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

Почему Semaphore известен как инструмент синхронизации?

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

Что такое разработка полного стека?

Полнофункциональная разработка — это создание как внешнего (клиентского), так и внутреннего (серверного) компонентов веб-приложения. Веб-разработчики с полным стеком могут создавать полноценные онлайн-приложения и веб-сайты. Они отвечают за интерфейс, серверную часть, базу данных и отладку онлайн-приложений или веб-сайтов.