Шта је Семапхоре у Јави и његова употреба?



За синхронизацију процеса користи се семафор. Овај блог на водиће вас кроз различите типове и примену семафора у јави.

Семафор у контролише приступ дељеном ресурсу путем бројача. То је синхронизација нити конструкција која се користи за слање сигнала између нити како би се избегли пропуштени сигнали или заштитио критични део. На овом блогу о Семафорима на Јави детаљно ћемо разумети концепт.
На овом блогу биће обрађене следеће теме:

како направити речник у јави

Шта је Семапхоре у Јави?

Семафор је променљива која се користи за синхронизацију процеса која се користи за управљање истовременим процесима. Такође се користи за контролу приступа заједничком ресурсу помоћу више истовремених процеса и избегавање тркачких услова.





Врсте семафора -

  • Бинарни семафор: Бинарни семафор узима само вредности 0 и 1 као вредности и користи се за узајамно изузеће као и за синхронизацију истовремених процеса.

  • Бројање семафора: Вредност семафора за бројање у било којој тачки указује на максималан број процеса који могу ући у критични одељак у исто време.



Рад Семафора

  • Ако је број семафора> 0, нит добија дозволу, смањујући број семафора.

  • Иначе, је блокиран док се не може добити дозвола.

  • Када нит више не треба приступ дељеном ресурсу, она издаје дозволу, повећавајући број семафора.



  • Ако друга нит чека дозволу, тада ће та нит стећи дозволу у то време.

Примена Семафора

импорт јава.утил.цонцуррент. * // Ресурс ће узети као заједничку класу класе Ресоурце {статиц инт цоунт = 0} класа МиДемо проширује Демо {Семапхоре сем Стринг тхреадНаме публиц МиДемо (Семапхоре сем, Стринг тхреадНаме) {супер (тхреадНаме) тхис. сем = сем тхис.тхреадНаме = тхреадНаме} @Оверриде публиц воид рун () {// Покрени Кс ако (тхис.гетНаме (). је једнако ('Кс')) {Систем.оут.принтлн ('Стартинг' + тхреадНаме) пробајте {// Добићете дозволу за приступ дељеном ресурсу Систем.оут.принтлн (тхреадНаме + 'чека на дозволу.') // стицање закључавања сем.ацкуире () Систем.оут.принтлн (тхреадНаме + 'добија дозволу . ') // Сада ће приступ заједничком ресурсу и остатак сачекати (инт и = 0 и<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) } } 

Оутпут-
Покретање Кс
Покретање И.
Кс чека дозволу
Чекате дозволу
Кс: 1
Кс: 2
Кс: 3
Кс: 4
Кс: 5
Кс: 6
Кс: 7
Кс издаје дозволу
Добијате дозволу
И: 6
И: 5
И: 4
И: 3
И: 2
И: 1
И: 0
И пушта дозволу
цоунт: 0

Овим смо дошли до краја овог блога на тему „Семафори у Јави“. Ако желите да сазнате више о Јави, погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250 000 задовољних ученика раширених широм света. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА дизајниран је за студенте и професионалце који желе да буду Јава програмер. Курс је дизајниран да вам пружи почетну предност у Јава програмирању и обучи вас како за основне тако и за напредне Јава концепте, заједно са разним Јава оквирима попут Хибернате & Спринг.

проћи по вредности проћи по референци јава

Имате питање за нас? Молимо вас да га помињете у одељку за коментаре овог блога „Шта је Семафор у Јави“ и јавићемо вам се што је пре могуће.