java:starvation_fairness
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:starvation_fairness [2015/04/19 16:33] – [Χρησιμοποιώντας Locks αντί για συγχρονισμένα blocks/μεθόδους] gthanos | java:starvation_fairness [2017/03/21 13:09] (current) – [Παρατεταμένη στέρηση πόρων] gthanos | ||
---|---|---|---|
Line 5: | Line 5: | ||
Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους: | Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους: | ||
* Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα. | * Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα. | ||
- | * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς | + | * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς άλλα νήματα καταλαμβάνουν διαρκώς τα monitor που αντιστοιχούν στους πόρους αυτούς. |
==== Υλοποιώντας την ισότιμη χρήση των πόρων ==== | ==== Υλοποιώντας την ισότιμη χρήση των πόρων ==== | ||
Line 74: | Line 74: | ||
<WRAP important 80% round center> | <WRAP important 80% round center> | ||
Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά (όπως η παραπάνω) το οποίο μπορεί να δώσει ένα ή περισσότερα Exceptions είναι σημαντικό να τοποθετούμε τη μέθοδο unlock() μέσα σε ένα finally block. Με αυτό τον τρόπο είμαστε βέβαιοι ότι ακόμη και εάν συμβεί κάποιο Exception, η κλειδαριά θα ξεκλειδώσει, | Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά (όπως η παραπάνω) το οποίο μπορεί να δώσει ένα ή περισσότερα Exceptions είναι σημαντικό να τοποθετούμε τη μέθοδο unlock() μέσα σε ένα finally block. Με αυτό τον τρόπο είμαστε βέβαιοι ότι ακόμη και εάν συμβεί κάποιο Exception, η κλειδαριά θα ξεκλειδώσει, | ||
+ | <code java> | ||
+ | lock.lock(); | ||
+ | try{ | ||
+ | //do critical section code, which may throw exception | ||
+ | } finally { | ||
+ | lock.unlock(); | ||
+ | } | ||
+ | </ | ||
</ | </ | ||
Line 116: | Line 124: | ||
boolean | boolean | ||
synchronized(this){ | synchronized(this){ | ||
- | waitingThreads.add(queueObject); | + | waitingThreads.add(queueObject); |
} | } | ||
java/starvation_fairness.1429461231.txt.gz · Last modified: 2015/04/19 15:33 (external edit)