Co to jest Semafor w Javie i jak go używać?
Opublikowany: 2022-05-26Firma Sun Microsystems w 1995 roku dostarczyła nam Javę, która była opartym na współpracy, klasowo i obiektowo językiem programowania oraz platformą komputerową. Ogromna liczba programów i stron internetowych nie będzie działać, jeśli nie masz zainstalowanej Javy, a coraz więcej jest opracowywanych codziennie. Java jest reklamowana i chwalona za szybkość, bezpieczeństwo i niezawodność. Jest to język komputerowy stworzony specjalnie do użytku w rozproszonym świecie Internetu. Został stworzony z myślą o projektowaniu języka programowania C++, ale jest łatwiejszy w użyciu i wymusza podejście programowania obiektowego.
Wykonawczy program PG w tworzeniu oprogramowania uczy dokładnie wszystkich umiejętności potrzebnych do osiągnięcia doskonałości w Javie.
Przykład semafora:
Wspólna var mutex: semafor = 1;
Proces i
zaczynać
.
.
P(muteks);
wykonaj CS;
V(muteks);
.
.
Koniec;
Co wyróżnia Javę?
Oddana społeczność programistów, architektów i entuzjastów języka Java przetestowała, dopracowała, rozwinęła i zweryfikowała język Java. Pomimo swoich prawie dwudziestoletnich korzeni, Java ewoluowała przez lata.
Java ma na celu ułatwienie tworzenia przenośnych, wysokowydajnych programów dla szerokiej gamy systemów komputerowych, wspierając w ten sposób podstawowe pojęcia obejmujące dostępność i interakcję międzyplatformową. Firmy mogą dostarczać dodatkowe usługi, zwiększać produktywność, komunikację i współpracę użytkowników końcowych oraz drastycznie obniżać koszty aplikacji korporacyjnych i konsumenckich, udostępniając je w heterogenicznych warunkach.
Co to jest Semafor w Javie?
Semafor używa licznika do regulowania dostępu do udostępnionego zasobu. Dostęp jest dozwolony, jeśli licznik jest większy od zera. Jeśli wartość wynosi 0, dostęp jest odrzucany. Licznik zlicza zezwolenia, które zapewniają dostęp do zasobu udostępnionego. W rezultacie, aby uzyskać dostęp do zasobu, wątek musi najpierw uzyskać pozwolenie od semafora.
Jak to działa?
Ogólnie rzecz biorąc, podczas korzystania z semafora wątek próbujący uzyskać dostęp do zasobu udostępnionego próbuje uzyskać pozwolenie. Jeśli liczba semaforów jest większa niż zero, wątek uzyskuje pozwolenie, powodując zmniejszenie liczby semaforów. Jeśli nie, wątek zostanie wstrzymany do czasu uzyskania zezwolenia.
Gdy wątek nie wymaga już dostępu do zasobu udostępnionego, zwalnia zezwolenie, powodując zwiększenie liczby semaforów. Jeśli inny wątek czeka na pozwolenie, ten wątek otrzyma je w tym momencie.
Rodzaje semaforów
W javie istnieją cztery rodzaje semaforów. Są to:
Semafor binarny :
Semafor binarny akceptuje tylko 0 i 1 jako wartości i jest używany do tworzenia wzajemnego wykluczania i synchronizowania współbieżnych działań.
Przykład semafora binarnego:
klasa publiczna BinarySemaforPrzykład
{
prywatna wartość logiczna zablokowana = fałsz;
BinarySemaphore(int inicjał)
{
zablokowane = (początkowe == 0);
}
public zsynchronizowane void waitForNotify() wyrzuca InterruptedException
{
podczas (zablokowany)
{
czekać();
}
zablokowane = prawda;
}
publiczne zsynchronizowane nieważne powiadomienieToWakeup()
{
jeśli (zablokowany)
{
notyfikować();
}
zablokowane = fałszywe;
}
}
Przeczytaj nasze popularne artykuły związane z tworzeniem oprogramowania
Jak zaimplementować abstrakcję danych w Javie? | Co to jest klasa wewnętrzna w Javie? | Identyfikatory Java: definicja, składnia i przykłady |
Zrozumienie enkapsulacji w OOPS z przykładami | Wyjaśnienie argumentów wiersza poleceń w języku C | 10 najważniejszych funkcji i cech chmury obliczeniowej w 2022 r. |
Polimorfizm w Javie: pojęcia, typy, charakterystyka i przykłady | Pakiety w Javie i jak ich używać? | Git Tutorial dla początkujących: Naucz się Gita od podstaw |
Liczenie semafora :
W każdym momencie wartość semafora zliczającego reprezentuje maksymalną liczbę procesów, które mogą jednocześnie uzyskać dostęp do obszaru krytycznego.
Przykład liczenia semafora:
public class ZliczanieSemaforPrzykład
{
prywatny sygnał int = 0;
publiczne zsynchronizowane void take()
{
ten.sygnał++;
this.notify();
}
publiczne zsynchronizowane void release() rzuca InterruptedException
{
while(ten.sygnał == 0)
czekać();
ten.sygnał–;
}
}
Semafor czasowy:
Semafory czasowe umożliwiają działanie wątku przez określony czas. Po pewnym czasie timer resetuje się i wszystkie inne zezwolenia są zwalniane.
Przykład semafora czasowego:
klasa TimedSemaforyPrzykład
{
prywatny semafor TimedSemaphore;
TimedSemaphoreExample (długi okres, int slotLimit)
{
semaphore = new TimedSemaphore(okres, TimeUnit.SECONDS, slotLimit);
}
próba logicznaDodaj()
{
zwróć semafor.tryAcquire();
}
dostępneSloty()
{
return semaphore.getAvailablePermits();
}
}
Ograniczony semafor :
Możemy ustawić górną granicę za pomocą ograniczonych semaforów. Jest używany zamiast liczenia semaforów, ponieważ nie mają one górnej wartości granicznej. Górna wartość graniczna reprezentuje maksymalną liczbę sygnałów, które mogą być przechowywane.
Przykład ograniczonego semafora :
klasa public BoundedSemaforyPrzykład
{
prywatne sygnały int = 0;
prywatna granica int = 0;
public BoundedSemaphoreexample(int upperBound)
{
this.bound = górna granica;
}
public void zsynchronizowane take() rzuca InterruptedException
{
while(this.signals == związane)
czekać();
to.sygnały++;
this.notify++;
}
public void zsynchronizowane release() rzuca InterruptedException
{
while(ten.sygnał == 0)
czekać();
to.sygnały–;
}
}
Poznaj nasze popularne kursy inżynierii oprogramowania
SL. Nie | Programy rozwoju oprogramowania | |
1 | Master of Science in Computer Science z LJMU i IIITB | Program certyfikacji cyberbezpieczeństwa Caltech CTME |
2 | Pełny Bootcamp rozwoju stosu | Program PG w Blockchain |
3 | Executive Post Graduate Programme in Software Development - specjalizacja w DevOps | Wyświetl wszystkie kursy inżynierii oprogramowania |
Charakterystyka:
Semafor ma następujące cechy:
- Pozwala wątkom komunikować się ze sobą.
- Zmniejsza stopień synchronizacji. W rezultacie zapewnia metodę synchronizacji niskiego poziomu.
- W semaforze nie ma wartości ujemnej. Ma wartość, która może być większa lub równa zero.
- Możemy zaimplementować semafor za pomocą operacji testowej i przerwań oraz wykonać go za pomocą deskryptorów plików.
Plusy i minusy Semaforów:
Zalety:
- Umożliwia dotarcie wielu nitek do istotnej części.
- Semafory są niezależne od maszyn.
- Semafory są zaimplementowane w niezależnym od maszyny kodzie mikrojądra.
- Wiele procesów nie może uzyskać dostępu do sekcji kluczowej.
- Nie ma marnowania czasu ani zasobów, ponieważ w semaforze zawsze jest zajęte oczekiwanie.
- Są one niezależne od maszyny i dlatego powinny być uruchamiane w niezależnym od maszyny kodzie mikrojądra.
- Umożliwiają elastyczne zarządzanie zasobami.
Niedogodności:
- Odwrócenie priorytetów jest jednym z najważniejszych ograniczeń semafora.
- System operacyjny musi śledzić wszystkie wywołania semaforów oczekujących i sygnalizujących.
- Ich użycie nigdy nie jest nakazane, ale po prostu przez tradycję.
- Akcje oczekiwania i sygnału muszą być wykonane poprawnie, aby uniknąć zakleszczeń w semaforze.
- Ponieważ programowanie semaforów jest skomplikowane, istnieje prawdopodobieństwo, że nie uda się osiągnąć wzajemnego wykluczenia.
- Nie jest to również realistyczna strategia dla aplikacji na dużą skalę, ponieważ powoduje utratę modułowości.
- Semafor jest bardziej podatny na błędy programistyczne.
- Błąd programistyczny może skutkować impasem lub naruszeniem wzajemnego wykluczenia.
Jak używać Semaphore jako blokady?
Semafor może być używany jako blokada w Javie. Oznacza, że ogranicza dostęp do zasobu. Aby uzyskać blokadę, każdy wątek, który chce uzyskać dostęp do zablokowanego zasobu, musi najpierw wywołać funkcję nabywania(). Po zakończeniu pracy wątek musi zwolnić blokadę, wywołując funkcję release(). Pamiętaj, że górna granica powinna być ustawiona na 1. Kurs executive PG w zakresie rozwoju pełnego stosu pomoże ci opanować wszystkie te umiejętności.
Streszczenie
Posiadanie jasnego pomysłu na języki programowania, takie jak Java, ma kluczowe znaczenie dla jasnej kariery programisty. upGrad oferuje kilka kursów, które mogą dać ci odpowiedni kop do obiecującej kariery. Specjalizacja w rozwoju Full-stack z Purude University at upGrad nauczy Cię wszystkich umiejętności potrzebnych do rozwoju w dziedzinie tworzenia oprogramowania.
Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Dlaczego potrzebujemy Semaphore w Javie?
Semafor to zmienna używana do synchronizacji procesów w celu zarządzania współbieżnymi procesami. Zapobiega również problemom związanym z wyścigiem, kontrolując dostęp do współużytkowanego zasobu przez kilka współbieżnych procesów.
Dlaczego potrzebujemy semafora liczącego?
Semafory są często używane do koordynowania dostępu do zasobów, a liczba semaforów jest ustawiona na listę wszystkich zasobów. Gdy zasoby są podawane lub dodawane, wątki niepodzielnie zwiększają liczbę, a gdy zasoby są wycofywane, wątki niepodzielnie zmniejszają liczbę.
Dlaczego Semaphore jest znany jako narzędzie do synchronizacji?
Semafor jest zasadniczo zmienną całkowitą współdzieloną przez wiele wątków. Ta zmienna jest wykorzystywana w środowisku wieloprocesorowym do przezwyciężenia problemu z sekcją krytyczną i ustanowienia synchronizacji procesu. Jest to czasami nazywane blokadą mutex.
Co to jest programowanie full-stack?
Programowanie z pełnym stosem to tworzenie zarówno komponentów front-end (po stronie klienta), jak i back-end (po stronie serwera) aplikacji internetowej. Twórcy stron internetowych z pełnym stosem mogą tworzyć pełnoprawne aplikacje i witryny internetowe. Odpowiadają za frontend, backend, bazę danych i debugowanie aplikacji lub stron internetowych.