מהי סמפור בג'אווה והשימוש בו?



נעשה שימוש בסמפור לסינכרון תהליכים. הבלוג הזה ידריך אותך בסוגים השונים ובהטמעה של סמפורות בג'אווה.

סמפור ב שולט בגישה למשאב משותף דרך מונה. זה סנכרון חוטים קונסטרוקציה המשמשת לשליחת אותות בין פתילים כדי למנוע אותות שהוחמצו או לשמור על קטע קריטי. בבלוג זה בנושא סמפורות בג'אווה נבין את המושג בפירוט.
הנושאים הבאים יוסקרו בבלוג זה:

מהי סמפור בג'אווה?

סמפור הוא משתנה המשמש לסינכרון תהליכים המשמש לניהול תהליכים מקבילים. הוא משמש גם כדי לשלוט בגישה למשאב משותף על ידי מספר תהליכים מקבילים ולהימנע מתנאי גזע.





סוגי סמפור -

  • סמפור בינארי: סמפור בינארי לוקח רק 0 ו- 1 כערכים ומשמש ליישום הרחקה הדדית וכן לסנכרון תהליכים מקבילים.

    ההבדל בין חיפוש מחובר ללא קשר
  • ספירת סמפור: הערך של סמפור ספירה בכל נקודה מציין את המספר המרבי של תהליכים שיכולים להיכנס לחלק הקריטי באותו זמן בדיוק.



עבודה של סמפור

  • אם ספירה של סמפור> 0, החוט מקבל אישור, ופוחת בספירת הסמפור.

    כיצד לכתוב התראה ב - JavaScript
  • אחרת, ה נחסם עד שניתן לרכוש היתר.

  • כאשר השרשור אינו זקוק עוד לגישה למשאב משותף, הוא משחרר את ההיתר ומגדיל את ספירת הסמפור.



  • אם חוט אחר ממתין להיתר, אז חוט זה ירכוש היתר באותו זמן.

יישום סמפור

ייבא java.util.concurrent. * // ייקח את המשאב ככיתת מחלקה משותפת משאב {static int count = 0} class MyDemo מרחיב הדגמה {Semaphore sem String threadName ציבורי MyDemo (Semaphore sem, String threadName) {super (threadName) זה. sem = sem this.threadName = threadName} @ Override הפעלה בטלנית ציבורית () {// הפעל על ידי X אם (this.getName (). שווה ('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 ממתין להיתר
מחכה להיתר
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, עיין ב מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון לתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות Java שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת בקטע ההערות בבלוג 'מה זה סמפור בג'אווה' ונחזור אליך בהקדם האפשרי.