Семафор в контролира достъпа до споделен ресурс чрез брояч. Това е синхронизация на нишки конструкция, използвана за изпращане на сигнали между нишки, за да се избегнат пропуснати сигнали или да се предпази критична секция. В този блог за 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“ и ние ще се свържем с вас възможно най-скоро.