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:concurrency_intro [2015/03/24 13:35] gthanos [Επανενεργοποίηση ενός νήματος μέσω της μεθόδου interrupt()] |
java:concurrency_intro [2015/03/24 13:47] gthanos [Επανενεργοποίηση ενός νήματος μέσω της μεθόδου interrupt()] |
||
---|---|---|---|
Line 99: | Line 99: | ||
<WRAP center round 85% tip> | <WRAP center round 85% tip> | ||
- | Ο μηχανισμός διακοπής υλοποιείται χρησιμοποιώντας ένα εσωτερικό flag (σημαία) γνωστό ως interrupt status. H κλήση της Thread.interrupt() θέτει στην τιμή true αυτήν τη σημαία. Όταν ένα νήμα ελέγχει αν έχει διακοπεί ή όχι καλώντας τη στατική μέθοδο Thread.interrupted(), το παραπάνω flag απενεργοποιείται. Η μη στατική μέθοδος isInterrupted(), χρησιμοποιείται από ένα νήμα για να ενημερωθεί για την κατάσταση διακοπής του ιδίου νήματος ή ενός άλλου νήματος (εξαρτάται από το αντικείμενο που την καλεί), αλλά δεν αλλάζει την κατάσταση του flag διακοπής. | + | Ο μηχανισμός διακοπής υλοποιείται χρησιμοποιώντας ένα εσωτερικό flag (boolean true/false) γνωστό ως interrupt status. H κλήση της Thread.interrupt() θέτει στην τιμή true αυτό το flag. Κάθε φορά που ένα νήμα ελέγχει αν έχει διακοπεί ή όχι (καλώντας τη στατική μέθοδο Thread.interrupted() ), το παραπάνω flag απενεργοποιείται λαμβάνοντας την τιμή false. |
+ | |||
+ | Η μη στατική μέθοδος isInterrupted(), χρησιμοποιείται από ένα νήμα για να ενημερωθεί για την κατάσταση διακοπής του ιδίου νήματος ή ενός άλλου νήματος (εξαρτάται από το αντικείμενο που την καλεί), αλλά δεν αλλάζει την κατάσταση του flag διακοπής. | ||
</WRAP> | </WRAP> | ||
+ | ===== Περιμένοντας ένα νήμα να ολοκληρώσει μέσω της μεθόδου join() ===== | ||
+ | |||
+ | Η μέθοδος [[http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()|join()]] επιτρέπει σε ένα νήμα να σταματήσει την εκτέλεση του έως ότου ένα άλλο νήμα να ολοκληρώσει την εκτέλεση του. Αν υποθέσουμε ότι ένα νήμα 't' εκτελείται παράλληλα με το τρέχον νήμα, εάν το τρέχον νήμα καλέσει το παρακάτω | ||
+ | |||
+ | <code java> | ||
+ | t.join(); | ||
+ | </code> | ||
+ | |||
+ | τότε η εκτέλεση του σταματάει έως ότου το νήμα 't' να τερματίσει την εκτέλεση του. Υπάρχουν οι εξής παραλλαγές της μεθόδου join | ||
+ | * **t.join():** περίμενε μέχρι το νήμα t να τερματίσει | ||
+ | * **t.join(long millis):** μέχρι το νήμα t να τερματίσει ή περίμενε για **millis** milliseconds. | ||
+ | * **t.join(long millis, int nanos):** μέχρι το νήμα t να τερματίσει ή περίμενε για **millis+nanos/1000000** milliseconds. | ||