java:concurrency_intro

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 Both sides next revision
java:concurrency_intro [2015/03/24 13:24]
gthanos [Επανενεργοποίηση ενός νήματος μέσω της μεθόδου interrupt()]
java:concurrency_intro [2015/03/24 13:35]
gthanos [Επανενεργοποίηση ενός νήματος μέσω της μεθόδου interrupt()]
Line 86: Line 86:
   }   }
 </​code>​ </​code>​
 +
 +Εάν ένα νήμα δεν καλεί κάποια μέθοδο που δημιουργεί [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​InterruptedException.html|InterruptedException]] θα πρέπει περιοδικά να ελέγχει κατά πόσο υπάρχει κάποια σήμα διακοπής προς το συγκεκριμένο νήμα σε μία ανακύκλωση της μορφής
 +
 +<code java>
 +for (int i = 0; i < inputs.length;​ i++) {
 +    heavyCalc(inputs[i]);​
 +    if (Thread.interrupted()) {
 +        throw new InterruptedException();​
 +    }
 +}
 +</​code>​
 +
 +<WRAP center round 85% tip>
 +Ο μηχανισμός διακοπής υλοποιείται χρησιμοποιώντας ένα εσωτερικό flag (σημαία) γνωστό ως interrupt status. H κλήση της Thread.interrupt() θέτει στην τιμή true αυτήν τη σημαία. Όταν ένα νήμα ελέγχει αν έχει διακοπεί ή όχι καλώντας τη στατική μέθοδο Thread.interrupted(),​ το παραπάνω flag απενεργοποιείται. Η μη στατική μέθοδος isInterrupted(),​ χρησιμοποιείται από ένα νήμα για να ενημερωθεί για την κατάσταση διακοπής του ιδίου νήματος ή ενός άλλου νήματος (εξαρτάται από το αντικείμενο που την καλεί),​ αλλά δεν αλλάζει την κατάσταση του flag διακοπής.
 +</​WRAP>​
 +
  
  
java/concurrency_intro.txt · Last modified: 2016/02/26 11:15 (external edit)