java:synchronized_methods_blocks

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:synchronized_methods_blocks [2018/03/08 10:40]
gthanos [Συγχρονισμένες μέθοδοι]
java:synchronized_methods_blocks [2018/03/08 12:02]
gthanos [Συγχρονισμένα Βlocks]
Line 56: Line 56:
     public void inc1() {     public void inc1() {
         synchronized(lock1) {         synchronized(lock1) {
-            c1++;+            while(true) { 
 +               for(long i=0; i<999999999L; i++
 +                 ; 
 +               System.out.println("Counter1: "+ ++c1); 
 +            }
         }         }
     }     }
Line 62: Line 66:
     public void inc2() {     public void inc2() {
         synchronized(lock2) {         synchronized(lock2) {
-            c2++;+            while(true) { 
 +               for(long i=0; i<999999999L; i++
 +                 ; 
 +               System.out.println("Counter2: "+ ++c2); 
 +            }
         }         }
     }     }
 +}
 +</code>
 +
 +<WRAP important 80% round center>
 +Στο παραπάνω παράδειγμα, οι μέθοδοι **inc1** και **inc2** περιέχουν δύο συγχρονισμένα blocks που κλειδώνουν από διαφορετικά αντικείμενα (**lock1** και **lock2**). Αυτό πρακτικά σημαίνει ότι οι μέθοδοι **inc1** και **inc2** μπορούν να κληθούν ταυτόχρονα από δύο διαφορετικά νήματα. Ενδεικτικό είναι το παρακάτω πρόγραμμα:
 +</WRAP>
 +
 +<code java SyncBlockThread.java>
 +public class SyncBlockThread extends Thread {
 +  SyncBlock block;
 +  boolean counter1;
 +  public SyncBlockThread(SyncBlock block, boolean counter1) {
 +    this.block = block;
 +    this.counter1 = counter1;
 +  }
 +  
 +  public void run() {
 +    if(counter1)
 +      block.inc1();
 +    else
 +      block.inc2();
 +  }
 +  
 +  public static void main(String []args) {
 +    SyncBlock block = new SyncBlock();
 +    new SyncBlockThread(block, true).start();
 +    new SyncBlockThread(block, false).start();
 +  }
 } }
 </code> </code>
Line 91: Line 127:
  
  
 +|Προηγούμενο: [[:java:thread_memory_model| Το μοντέλο μνήμης της Java ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[java:thread_signaling | Συγχρονισμός νημάτων ]]|
  
  
java/synchronized_methods_blocks.txt · Last modified: 2018/03/08 12:03 (external edit)