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 10:40] – [Συγχρονισμένες μέθοδοι] gthanosjava:synchronized_methods_blocks [2018/03/08 12:03] (current) – external edit 127.0.0.1
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_signalling | Συγχρονισμός νημάτων ]]|
  
  
java/synchronized_methods_blocks.1520505600.txt.gz · Last modified: 2018/03/08 10:40 by gthanos