Какво представлява Semaphore в Java и неговото използване?



За синхронизиране на процесите се използва семафор. Този блог ще ви разведе през различните видове и изпълнение на семафори в java.

Семафор в контролира достъпа до споделен ресурс чрез брояч. Това е синхронизация на нишки конструкция, използвана за изпращане на сигнали между нишки, за да се избегнат пропуснати сигнали или да се предпази критична секция. В този блог за Semaphores в Java ще разберем концепцията подробно.
В този блог ще бъдат разгледани следните теми:

Какво представлява Semaphore в Java?

Семафорът е променлива, използвана за синхронизиране на процеси, която се използва за управление на едновременни процеси. Също така се използва за контрол на достъпа до общ ресурс чрез множество едновременни процеси и избягване на състезателно състояние.





Видове семафор -

  • Двоичен семафор: Двоичният семафор приема само стойности 0 и 1 и се използва за осъществяване на взаимно изключване, както и за синхронизиране на едновременни процеси.

  • Преброяване на семафора: Стойността на преброяващия семафор във всяка точка показва максималния брой процеси, които могат да влязат в критичната секция по едно и също време.



    как да създам сингълтон клас в java -

Работа на Семафор

  • Ако броят на семафорите> 0, нишката придобива разрешение, намалявайки броя на семафорите.

  • В противен случай се блокира, докато може да се получи разрешение.

  • Когато нишката вече не се нуждае от достъп до споделен ресурс, тя освобождава разрешението, увеличавайки броя на семафорите.



    как да създам сигнал в javascript -
  • Ако друга нишка чака разрешение, тогава тази нишка ще получи разрешение по това време.

Внедряване на Semaphore

import java.util.concurrent. * // Ще вземе ресурс като споделен клас class Resource {static int count = 0} class MyDemo extends Demo {Semaphore sem String threadName public MyDemo (Semaphore sem, String threadName) {super (threadName) this. sem = sem this.threadName = threadName} @Override public void run () {// Run By X if (this.getName (). equals ('X')) {System.out.println ('Starting' + threadName) опитайте {// Ще получи разрешение за достъп до споделен ресурс System.out.println (threadName + 'изчакване на разрешение.') // придобиване на заключване sem.acquire () System.out.println (threadName + 'получава разрешение . ') // Сега достъпът до споделения ресурс и почивката ще изчака (int i = 0 i<7 i++) { Resource.count++ System.out.println(threadName + ': ' + Resouce.count) // Now thread Y will try to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } // run by thread Y else { System.out.println('Starting ' + threadName) try { // First, Y will try to get permit System.out.println(threadName + ' waiting for a permit.') // acquiring the lock sem.acquire() System.out.println(threadName + ' gets a permit.') // Now, accessing the shared resource and others will wait for(int i=0 i < 7 i++) { Resource.count-- System.out.println(threadName + ': ' + Resource.count) // Now, allowing a context switch -- if possible. // for thread X to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } } } public class SemTest { public static void main(String args[]) throws InterruptedException { // creating a Semaphore object // with number of permits 1 Semaphore sem = new Semaphore(1) // creating two threads with name X and Y // Here thread X will increment and Y will decrement the counter MyDemo md1 = new MyDemo(sem, 'X') MyDemo md2 = new MyDemo(sem, 'Y') // stating threads X and Y md1.start() md2.start() // waiting for threads X and Y md1.join() mtd.join() System.out.println('count: ' + Resource.count) } } 

Изход -
Стартиране на X
Започвайки Y
X чака разрешение
Чакате разрешение
X: 1
X: 2
X: 3
X: 4
X: 5
X: 6
X: 7
X освобождава разрешението
Y получава разрешението
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
И пуска разрешения
брой: 0

С това стигнахме до края на този блог на тема „Семафори в Java“. Ако искате да научите повече за Java, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този блог „Какво представлява Semaphore в Java“ и ние ще се свържем с вас възможно най-скоро.