This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:synchronized_methods_blocks [2018/03/07 14:07] gthanos [Συγχρονισμένες μέθοδοι] |
java:synchronized_methods_blocks [2018/03/08 11:15] gthanos [Συγχρονισμένα Βlocks] |
||
|---|---|---|---|
| Line 30: | Line 30: | ||
| Αν έχουμε ένα αντικείμενο //counter// της παραπάνω κλάσης τότε ισχύουν τα παρακάτω | Αν έχουμε ένα αντικείμενο //counter// της παραπάνω κλάσης τότε ισχύουν τα παρακάτω | ||
| - | * Δεν είναι δυνατόν δύο ή περισσότερες συγχρονισμένες μέθοδοι ενός αντικειμένου να κληθούν ταυτόχρονα από διαφορετικά νήματα. Αν υποθέσουμε ότι ένα νήμα εκτελεί μία από τις συγχρονισμένες μεθόδους ενός αντικειμένου. Όσα άλλα νήματα επιχειρούν να έχουν πρόσβαση σε συγχρονισμένες μεθόδους του ιδίου αντικειμένου, | + | * Δεν είναι δυνατόν |
| ===== Συγχρονισμένα Βlocks ===== | ===== Συγχρονισμένα Βlocks ===== | ||
| Line 56: | Line 56: | ||
| public void inc1() { | public void inc1() { | ||
| synchronized(lock1) { | synchronized(lock1) { | ||
| - | | + | |
| + | | ||
| + | ; | ||
| + | | ||
| + | } | ||
| } | } | ||
| } | } | ||
| Line 62: | Line 66: | ||
| public void inc2() { | public void inc2() { | ||
| synchronized(lock2) { | synchronized(lock2) { | ||
| - | | + | |
| + | | ||
| + | ; | ||
| + | | ||
| + | } | ||
| } | } | ||
| } | } | ||
| Line 71: | Line 79: | ||
| Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, | Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, | ||
| </ | </ | ||
| + | |||
| + | <WRAP important 80% round center> | ||
| + | Στο παραπάνω παράδειγμα, | ||
| + | </ | ||
| + | |||
| + | <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, | ||
| + | new SyncBlockThread(block, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| Δείτε το παρακάτω παράδειγμα εμφωλευμένων κλήσεων συγχρονισμένων μεθόδων | Δείτε το παρακάτω παράδειγμα εμφωλευμένων κλήσεων συγχρονισμένων μεθόδων | ||