User Tools

Site Tools


java:synchronized_methods_blocks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:synchronized_methods_blocks [2018/03/08 11:13] – [Συγχρονισμένα Βlocks] gthanosjava:synchronized_methods_blocks [2018/03/08 12:03] (current) – external edit 127.0.0.1
Line 57: Line 57:
         synchronized(lock1) {         synchronized(lock1) {
             while(true) {             while(true) {
-               for(long i=0; i<99999999L; i++)+               for(long i=0; i<999999999L; i++)
                  ;                  ;
                System.out.println("Counter1: "+ ++c1);                System.out.println("Counter1: "+ ++c1);
Line 67: Line 67:
         synchronized(lock2) {         synchronized(lock2) {
             while(true) {             while(true) {
-               for(long i=0; i<99999999L; i++)+               for(long i=0; i<999999999L; i++)
                  ;                  ;
                System.out.println("Counter2: "+ ++c2);                System.out.println("Counter2: "+ ++c2);
Line 75: Line 75:
 } }
 </code> </code>
- 
-<WRAP tip 80% round center> 
-Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, όταν αυτό έχει καταληφθεί από άλλο αντικείμενο, το ίδιο νήμα μπορεί να λάβει το //monitor lock// του ιδίου αντικειμένου όσες φορές χρειαστεί αν υπάρχουν εμφωλευμένες (nested) κλήσεις συγχρονισμένων μεθόδων ή συγχρονισμένων blocks. Σε αυτές τις περιπτώσεις το //monitor lock// απελευθερώνεται μόνο όταν το νήμα βγει και από την αρχική συγχρονισμένη μέθοδο ή το αρχικό συγχρονισμένο block που μπήκε πριν από οποιαδήποτε άλλη κλήση συγχρονισμένης μεθόδου ή μπλοκ. 
-</WRAP> 
  
 <WRAP important 80% round center> <WRAP important 80% round center>
-Στο παραπάνω παράδειγμα, οι μέθοδοι inc1 και inc2 περιέχουν δύο συγχρονισμένα blocks που κλειδώνουν από διαφορετικά αντικείμενα (lock1 και lock2). Αυτό πρακτικά σημαίνει ότι οι μέθοδοι ''inc1'' και inc2 μπορούν να κληθούν ταυτόχρονα από δύο διαφορετικά νήματα. Ενδεικτικό είναι το παρακάτω πρόγραμμα:+Στο παραπάνω παράδειγμα, οι μέθοδοι **inc1** και **inc2** περιέχουν δύο συγχρονισμένα blocks που κλειδώνουν από διαφορετικά αντικείμενα (**lock1** και **lock2**). Αυτό πρακτικά σημαίνει ότι οι μέθοδοι **inc1** και **inc2** μπορούν να κληθούν ταυτόχρονα από δύο διαφορετικά νήματα. Ενδεικτικό είναι το παρακάτω πρόγραμμα:
 </WRAP> </WRAP>
  
Line 107: Line 103:
 } }
 </code> </code>
 +
 +<WRAP tip 80% round center>
 +Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, όταν αυτό έχει καταληφθεί από άλλο αντικείμενο, το ίδιο νήμα μπορεί να λάβει το //monitor lock// του ιδίου αντικειμένου όσες φορές χρειαστεί αν υπάρχουν εμφωλευμένες (nested) κλήσεις συγχρονισμένων μεθόδων ή συγχρονισμένων blocks. Σε αυτές τις περιπτώσεις το //monitor lock// απελευθερώνεται μόνο όταν το νήμα βγει και από την αρχική συγχρονισμένη μέθοδο ή το αρχικό συγχρονισμένο block που μπήκε πριν από οποιαδήποτε άλλη κλήση συγχρονισμένης μεθόδου ή μπλοκ.
 +</WRAP>
  
 Δείτε το παρακάτω παράδειγμα εμφωλευμένων κλήσεων συγχρονισμένων μεθόδων  Δείτε το παρακάτω παράδειγμα εμφωλευμένων κλήσεων συγχρονισμένων μεθόδων 
Line 127: Line 127:
  
  
 +|Προηγούμενο: [[:java:thread_memory_model| Το μοντέλο μνήμης της Java ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[java:thread_signalling | Συγχρονισμός νημάτων ]]|
  
  
java/synchronized_methods_blocks.1520507589.txt.gz · Last modified: 2018/03/08 11:13 (external edit)