Semaphore ใน Java คืออะไรและการใช้งาน?



สัญญาณถูกใช้สำหรับการซิงโครไนซ์ของกระบวนการ บล็อกนี้จะแนะนำคุณเกี่ยวกับประเภทต่างๆและการนำไปใช้งานของ semaphores ใน java

สัญญาณใน ควบคุมการเข้าถึงทรัพยากรที่แชร์ผ่านตัวนับ มันคือ การซิงโครไนซ์เธรด โครงสร้างที่ใช้ในการส่งสัญญาณระหว่างเธรดเพื่อหลีกเลี่ยงสัญญาณพลาดหรือป้องกันส่วนที่สำคัญ ในบล็อกเกี่ยวกับ Semaphores ใน Java นี้เราจะเข้าใจแนวคิดโดยละเอียด
หัวข้อต่อไปนี้จะกล่าวถึงในบล็อกนี้:

Semaphore ใน Java คืออะไร?

เซมาฟอร์คือตัวแปรที่ใช้สำหรับการซิงโครไนซ์ของกระบวนการที่ใช้สำหรับจัดการกระบวนการที่เกิดขึ้นพร้อมกัน นอกจากนี้ยังใช้เพื่อควบคุมการเข้าถึงทรัพยากรทั่วไปโดยกระบวนการหลายอย่างพร้อมกันและหลีกเลี่ยงสภาวะการแย่งชิง





ประเภทของสัญญาณ -

  • สัญญาณไบนารี: เซมาฟอร์ไบนารีใช้เพียง 0 และ 1 เป็นค่าและใช้เพื่อใช้การยกเว้นซึ่งกันและกันรวมทั้งซิงโครไนซ์กระบวนการพร้อมกัน

    isinstance ใน python คืออะไร
  • การนับสัญญาณ: ค่าของสัญญาณการนับ ณ จุดใดก็ได้ระบุจำนวนสูงสุดของกระบวนการที่สามารถเข้าสู่ส่วนวิกฤตในเวลาเดียวกัน



    java ตัวแปรอินสแตนซ์คืออะไร

การทำงานของสัญญาณ

  • หากเซมาฟอร์นับ> 0 เธรดจะได้รับใบอนุญาตโดยจะลดจำนวนเซมาฟอร์

  • อื่น ๆ ถูกปิดกั้นจนกว่าจะได้รับใบอนุญาต

  • เมื่อเธรดไม่ต้องการเข้าถึงรีซอร์สที่แชร์อีกต่อไปเธรดจะปล่อยใบอนุญาตโดยเพิ่มจำนวนเซมาฟอร์



  • หากเธรดอื่นกำลังรอการอนุญาตเธรดนั้นจะได้รับใบอนุญาตในเวลานั้น

    แปลงสตริงเป็นวันที่ใน java

การดำเนินการของ Semaphore

import java.util.concurrent. * // จะใช้ Resource เป็นคลาสคลาสที่ใช้ร่วมกัน Resource {static int count = 0} class MyDemo ขยาย 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 ('เริ่มต้น' + 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 กำลังรอใบอนุญาต
Y กำลังรอใบอนุญาต
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

ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของบล็อกนี้ในเรื่อง“ Semaphores in Java” หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Java โปรดดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer หลักสูตรนี้ออกแบบมาเพื่อให้คุณเริ่มต้นการเขียนโปรแกรม Java และฝึกอบรมแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับเฟรมเวิร์ก Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อก 'Semaphore ใน Java' นี้แล้วเราจะติดต่อกลับโดยเร็วที่สุด