Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Σχετικά έγγραφα
Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 8: Ταυτοχρονισμός και νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Κινητά και Διάχυτα Συστήματα. Ενότητα # 3: Νήματα και ταυτοχρονισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Οντοκεντρικός Προγραμματισμός

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Φροντιστήριο Α' Κατανεμημένα Συστήματα Επιμέλεια: Μπούτσης Ιωάννης

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1

Αντικειμενοστρεφής Προγραμματισμός

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Κατανεμημένα Συστήματα

Διάλεξη Εισαγωγή στη Java, Μέρος Γ

Το παρακάτω πρόγραμμα ορίζει δυο κλάσεις την SimpleThread και την TwoThreadsTest:

13. Νήματα Νήματα και χρήση νημάτων στη Java Τι είναι τα νήματα; Τρία μέρη ενός νήματος

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση

Distributed Systems. Βάνα Καλογεράκη Τµήµα Πληροφορικής Οικονοµικό Πανεπιστήµιο Αθηνών. Lecture 3: Threads (Νήµατα) Distributed Systems

Ειδικά Θέματα Προγραμματισμού

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Εισαγωγή στα Java Νήµατα. Τι είναι ένα thread (1/9)

Λιβανός Γιώργος Εξάμηνο 2017Β

Σύστηµα Java RMI. Κατανεµηµένα Συστήµατα 17-1

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

Εισαγωγή στην Java. Module 9: Threads. Prepared by Chris Panayiotou for EPL /03/2004

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Εισαγωγή στον Προγ/μό Η/Υ

Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Ιδιοκτησία Αντικειµένου

Κεφάλαιο 1. Νήματα (Threads). Time Sharing

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

2.1 Αντικειµενοστρεφής προγραµµατισµός

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Νήµατα. Πολύ σηµαντικό

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Κεφάλαιο 3. Διδακτικοί Στόχοι

Σύστηµα CORBA. Κατανεµηµένα Συστήµατα 18-1

Φροντιστήριο Α' Κατανεμημένα Συστήματα Επιμέλεια: Μπούτσης Ιωάννης

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Δομημένος Προγραμματισμός

3 Αλληλεπίδραση Αντικειμένων

Λειτουργικά Συστήματα (Λ/Σ)

Παράλληλη Επεξεργασία

ΚΕΦΑΛΑΙΟ 9. Ταυτόχρονος προγραμματισμός και νήματα. 9.1 Εισαγωγή

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Λειτουργικά συστήματα πραγματικού χρόνου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Ι (ΗΥ120)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

Διεργασίες (Processes)

Κλάσεις και Αντικείµενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Λειτουργικά Συστήματα. Ενότητα # 2: Διεργασίες και Νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Παράλληλη Επεξεργασία

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Wrapper Classes, Abstract Classes and Interfaces

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δομές ελέγχου ροής προγράμματος

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Λειτουργικά Συστήματα. Ενότητα # 2: Διεργασίες και Νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Ανάλυση Επιδόσεων Συστημάτων Πραγματικού Χρόνου

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Λειτουργικά Συστήματα (Λ/Σ)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Ανάπτυξη και Σχεδίαση Λογισμικού

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ροµολόγηση Επεξεργαστή

Κινητά και Διάχυτα Συστήματα. Ενότητα # 4: Απομακρυσμένα αντικείμενα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Αντικειµενοστραφής Προγραµµατισµός

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Transcript:

Νήµαταστην Java Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων Κατανεµηµένα Συστήµατα 11-1

Νήµαταστην Java γεννηθείσα notify notifyall έτοιµη start εκπνοή κβάντου χρόνου yield διακοπή διανοµή ολοκλήρωση εισόδου/εξόδου wait sleep εκτελούµενη ολοκλήρωση εκτέλεσης αίτηση για είσοδο/έξοδο σε αναµονή κοιµώµενη νεκρή εµποδισµένη εκπνοή διαστήµατος ύπνου Καταστάσεις νηµάτων Παρόµοιες µε αυτές των διεργασιών Κατανεµηµένα Συστήµατα 11-2

Νήµαταστην Java ιάφοροι τρόποι διακοπής εκτέλεσης Αναµονή εισόδου / εξόδου Αναµονή χρονοµέτρου (sleep) Αναµονή γεγονότος (wait) Κάθε εφαρµογή ξεκινά µε ένα νήµα Εκτελεί τη µέθοδο main της εφαρµογής Το νήµα αυτό µπορεί να δηµιουργήσει άλλα Προτεραιότητες νηµάτων Κάθε νήµα έχει προτεραιότητα 1 (χαµηλή) έως 10 (υψηλή) Η προτεραιότητα κληρονοµείται από τον γονέα Χρονοπρογραµµατισµός ανάλογα µε την προτεραιότητα ιακοπτόµενος ή µη διακοπτόµενος χρονοπρογραµµατισµός Εξαρτάται από την πλατφόρµα της Java Κατανεµηµένα Συστήµατα 11-3

Νήµαταστην Java Νήµατα: Τάξη Thread Thread (String όνοµα_νήµατος) Κατασκευάζει ένα νήµα µε συγκεκριµένο όνοµα Thread () Κατασκευάζει ένα νήµα µε όνοµα "Thread-#" void start() Ξεκινά την εκτέλεση ενός νέου νήµατος (µέθοδος run()) Τα δύο νήµατα εκτελούνται παράλληλα void run () Η µέθοδος που περιέχει τον κώδικα του νήµατος Κάθε υποτάξη της Thread ορίζει τη δική της run() void setname (String όνοµα) / String getname () Θέτει/επιστρέφει το όνοµα του νήµατος Κατανεµηµένα Συστήµατα 11-4

Νήµαταστην Java static Thread currentthread () Επιστρέφει µία αναφορά προς το εκτελούµενο νήµα void sleep (int διάστηµα) Αποκοιµίζει το νήµα για διάστηµα msec void yield () Παραχωρεί τον επεξεργαστή σε άλλα νήµατα void interrupt () Στέλνει στο νήµα ένα σήµα διακοπής σ ένα νήµα Αν το νήµα είναι σε κοιµισµένο ή σε αναµονή ξυπνάει Αλλιώς το νήµα πρέπει να ελέγχει ρητά αν έχει λάβει διακοπές boolean isinterrupted () Επιστρέφει true αν το νήµα έχει διακοπεί Κατανεµηµένα Συστήµατα 11-5

Νήµαταστην Java boolean isalive () Επιστρέφει true το νήµα εκτελείται void setpriority (int προτεραιότητα) / int getpriority () Θέτει/επιστρέφει την προτεραιότητα του νήµατος void join (long διάστηµα) Περιµένει τον τερµατισµό του νήµατος για διάστηµα msec Αν το διάστηµα είναι 0, αναµονή για πάντα void join (): Ισοδύναµη µε join(0) void checkaccess () Εξετάζει αν έχουµε πρόσβαση στο νήµα Εξαίρεση αν δεν έχουµε, επιστροφή αν έχουµε boolean holdslock (Object Obj) Επιστρέφει true αν το νήµα κατέχει την κλειδαριά του Obj Κατανεµηµένα Συστήµατα 11-6

Νήµαταστην Java ThreadGroup getthreadgroup () Επιστρέφει την οµάδα του νήµατος int activecount () Επιστρέφει το πλήθος ενεργών νηµάτων της οµάδας int enumerate (Thread[] πίνακας) Αντιγράφει κάθε ενεργό νήµα της οµάδας στον πίνακα Αν ο πίνακας είναι µικρός, δεν αποθηκεύονται όλα String tostring () Επιστρέφει όνοµα, προτεραιότητα και οµάδα του νήµατος void dumpstack () Εµφανίζει τη στοίβα κλήσεων των µεθόδων του νήµατος Χρήσιµη για εκσφαλµάτωση εφαρµογών Κατανεµηµένα Συστήµατα 11-7

Συγχρονισµόςνηµάτων Κάθε αντικείµενο έχει µια κλειδαριά (lock) Μία κλειδαριά ανά υπόσταση (αντικείµενο) Η κλειδαριά µπορεί να δεσµεύεται από ένα νήµα Απόκτηση της κλειδαριάς πριν από κρίσιµη περιοχή Απελευθέρωση της κλειδαριάς µετά από κρίσιµη περιοχή Χρήση synchronized µεθόδων και εντολών Παρακολουθητής (monitor)αντικειµένου Ελέγχει την κλειδαριά του αντικειµένου Επιτρέπει σε ένα µόνο νήµα την απόκτηση της κλειδαριάς Εµποδίζει όλα τα άλλα νήµατα Απόκτηση κλειδαριάς για εκτέλεση synchronized µεθόδου Επιτρέπονται πολλές synchronized µέθοδοι ανά αντικείµενο Αµοιβαίος αποκλεισµός όλων των synchronized µεθόδων Κατανεµηµένα Συστήµατα 11-8

Συγχρονισµόςνηµάτων Προστασία δεδοµένων αντικειµένου Τα δηµόσια (public) δεδοµένα δεν προστατεύονται Ιδιοκτησία κλειδαριάς αντικειµένου Η κλειδαριά καλύπτει όλες τις µεθόδους του αντικειµένου Το νήµα που την απέκτησε µπορεί να κάνει πολλές κλήσεις Κληρονοµικότητα τάξεων Ακύρωση synchronized µε µη synchronized µεθόδους Ακύρωση µη synchronized µε synchronized µεθόδους Στατικές µέθοδοι synchronized Το αντικείµενο τάξης έχει ανεξάρτητη κλειδαριά Ανεξάρτητη από τις κλειδαριές των υποστάσεων Οι στατικές µέθοδοι συγχρονίζονται µεταξύ τους Κατανεµηµένα Συστήµατα 11-9

Συγχρονισµόςνηµάτων Synchronizedεντολές Synchronized (παράσταση) { εντολές } Αρχικά υπολογίζεται η παράσταση Πρέπει να καταλήγει σε αναφορά αντικειµένου Αποκτάται η κλειδαριά του αντικειµένου Οι εντολές εκτελούνται µε αµοιβαίο αποκλεισµό Γιατί synchronizedεντολές; Μικρότερες κρίσιµες περιοχές Συγχρονισµός πάνω σε οποιοδήποτε αντικείµενο Συγχρονισµός πάνω σε κλειδαριά αντικειµένου τάξης Γιατί synchronized µέθοδοι; Συγχρονισµός από την πλευρά του εξυπηρετητή Το αντικείµενο αποφασίζει για το συγχρονισµό του Κατανεµηµένα Συστήµατα 11-10

Επικοινωνίανηµάτων Συγχρονισµός µε βάση συνθήκες Παράδειγµα: πρόβληµα παραγωγού-καταναλωτή Ο παραγωγός περιµένει για κενές θέσεις ενταµιευτών Ο καταναλωτής περιµένει για γεµάτες θέσεις ενταµιευτών Αναµονή µέχρι να ισχύσει κάποια συνθήκη void wait (long timeout): εµποδισµός νήµατος Το νήµα εµποδίζεται µέχρι: 1. Να κληθεί η µέθοδος notify και να επιλεγεί το νήµα 2. Να κληθεί η µέθοδος notifyall 3. Να περάσουν timeout msec 4. Να κληθεί η interrupt για την αποστολή διακοπής στο νήµα void wait (): ισοδύναµη µε wait (0) Αναµονή χωρίς εκπνοή χρονικού διαστηµατος Κατανεµηµένα Συστήµατα 11-11

Επικοινωνίανηµάτων void notifyall (): απελευθέρωση όλων των νηµάτων Μπορεί να άλλαξε κάποια συνθήκη αναµονής Ένα µόνο νήµα αποκτά την κλειδαριά Τα υπόλοιπα εµποδίζονται πάνω στην κλειδαριά void notify(): απελευθέρωση ενός νήµατος Μπορεί να άλλαξε κάποια συνθήκη αναµονής εν µπορούµε να επιλέξουµε το νήµα που απελευθερώνεται Χρήσιµη όταν δεν µας ενδιαφέρει το συγκεκριµένο νήµα Χρήσιµη όταν έχουµε µία µόνο συνθήκη αναµονής Σχέση wait και notify/notifyall Οι γνωστοποιήσεις δεν αποθηκεύονται Κάθε wait πρέπει να ακολουθείται από ένα notify / notifyall Χρήση timeout για αποφυγή αδιεξόδων Κατανεµηµένα Συστήµατα 11-12

Επικοινωνίανηµάτων Χρήση wait και notify/notifyall Επικοινωνία µόνο µέσω synchronized µεθόδων εν µπορούν να κληθούν από άλλες µεθόδους Σηµασιολογία εντολής wait Εµποδισµός του νήµατος πάνω στο αντικείµενο Απελευθέρωση κλειδαριάς αντικειµένου Η απελευθέρωση θα γίνει µέσω notify / notifyall Όταν εκτελεστεί ξανά το νήµα θα κατέχει την κλειδαριά Χρήση εντολής wait Κλήση wait πάντα µέσα σε βρόχο while (όχι εντολή if) Ο βρόχος ελέγχει την επιθυµητή συνθήκη Αν δεν ισχύει το νήµα εµποδίζεται Όταν το νήµα εκτελεστεί δεν θα ισχύει απαραίτητα η συνθήκη Κατανεµηµένα Συστήµατα 11-13

Επικοινωνίανηµάτων Σηµασιολογία εντολής notifyall Καλείται όταν ικανοποιηθεί κάποια συνθήκη Απελευθέρωση όλων των νηµάτων που κάλεσαν τη wait Κάθε νήµα αποκτά την κλειδαριά µε τη σειρά Τα νήµατα ελέγχουν τη συνθήκη αναµονής Αν δεν ικανοποιείται, εµποδίζονται ξανά Σηµασιολογία εντολής notify Απελευθερώνει ένα µόνο νήµα Κίνδυνος απελευθέρωσης λάθους νήµατος Πότε αξίζει η notify; Πιο οικονοµική από notifyall (ξυπνά ένα νήµα) Όλα τα νήµατα πρέπει να περιµένουν στην ίδια συνθήκη Mόνο ένα πρέπει να επωφελείται από τη συνθήκη Κατανεµηµένα Συστήµατα 11-14

Εκτελέσιµααντικείµενα ηµιουργία νηµάτων Απλούστερη µέθοδος η επέκταση της τάξης Thread εν γίνεται αν το αντικείµενο επεκτείνει κάποια άλλη τάξη Η Java δεν υποστηρίζει πολλαπλή κληρονοµικότητα τάξεων ιεπαφή Runnable Υλοποίηση από εκτελέσιµα αντικείµενα (νήµατα) Το αντικείµενο µπορεί να επεκτείνει οποιαδήποτε τάξη Περιέχει µόνο την (αφηρηµένη) µέθοδο run() Περνάµε το νήµα σε κατασκευαστή της τάξης Thread Εκκίνηση του νήµατος µε τη µέθοδο start() Thread (Runnable αντικείµενο, Stringόνοµα_νήµατος) ηµιουργεί επώνυµο νήµα για το αντικείµενο Runnable Thread (Runnable αντικείµενο) ηµιουργεί το νήµα "Thread-# " για το αντικείµενο Runnable Κατανεµηµένα Συστήµατα 11-15

Νήµαταδαίµονες Νήµατα χρήστη και νήµατα δαίµονες Κάθε νήµα είναι είτε νήµα χρήστη είτε νήµα δαίµων Η µέθοδος main εκτελείται από νήµα χρήστη Τα νήµατα δαίµονες εκτελούνται στο παρασκήνιο Η εφαρµογή δηµιουργεί όποια νήµατα θέλει Η εφαρµογή τερµατίζεται όταν τελειώσουν τα νήµατα χρήστη Τα νήµατα δαίµονες θανατώνονται αυτόµατα Ορισµός τύπου νήµατος Τα νέα νήµατα κληρονοµούν τον τύπο του δηµιουργού τους void setdaemon (booleanείναι_δαίµων) Σηµειώνει ένα νήµα ως νήµα δαίµονα ή χρήστη Επιτρέπεται η κλήση της µόνο από το δηµιουργό του boolean isdaemon () Επιστρέφει true αν το νήµα είναι δαίµων Κατανεµηµένα Συστήµατα 11-16

Οµάδεςνηµάτων Οµάδες νηµάτων: Τάξη ThreadGroup Ενιαία διαχείριση και προστασία νηµάτων οµάδας Κοινές µέθοδοι Thread και ThreadGroup Ιεραρχική οργάνωση οµάδων νηµάτων Ρίζα η οµάδα main που δηµιουργείται αυτόµατα Ένταξη νηµάτων σε οµάδες Κάθε νήµα προστίθεται στην οµάδα του δηµιουργού του Ο δηµιουργός µπορεί να ορίσει άλλη οµάδα Ο διαχειριστής ασφαλείας µπορεί να ορίσει άλλη οµάδα Οµάδες νηµάτων δαίµονες Καταστρέφονται όταν δεν περιέχουν ενεργά νήµατα ε σχετίζονται µε νήµατα δαίµονες Μπορεί να περιέχουν νήµατα δαίµονες ή χρήστη Κατανεµηµένα Συστήµατα 11-17

Οµάδεςνηµάτων ThreadGroup (String οµάδα) ηµιουργεί µία οµάδα νηµάτων µε γονέα την τρέχουσα οµάδα ThreadGroup (ThreadGroup γονέας, Stringοµάδα) Η οµάδα γονέας ορίζεται ρητά Σχετικοί κατασκευαστές νηµάτων Thread (ThreadGroup οµάδα, String όνοµα) ηµιουργεί ένα νήµα και το εντάσσει σε οµάδα Thread (ThreadGroup οµάδα, Runnable αντικείµενο) Χρησιµοποιεί επιπλέον ένα αντικείµενο Runnable Thread (ThreadGroup οµάδα, Runnableαντικείµενο, Stringόνοµα) Ορίζει επιπλέον και το όνοµα του νήµατος Κατανεµηµένα Συστήµατα 11-18

Οµάδεςνηµάτων String getname () επιστρέφει το όνοµα αυτής της οµάδας νηµάτων ThreadGroup getparent () Επιστρέφει την πατρική οµάδα νηµάτων void setdaemon(boolean δαίµονας) / boolean isdaemon() Θέτει / επιστρέφει τον τύπο της οµάδας void setmaxpriority (intµέγιστη) / int getmaxpriority () Θέτει / επιστρέφει τη µέγιστη προτεραιότητα νηµάτων εν αλλάζει την προτεραιότητα των ενεργών νηµάτων boolean parentof (ThreadGroup g) Επιστρέφει true αν η οµάδα είναι γονέας της g int activecount () Επιστρέφει πλήθος ενεργών νηµάτων οµάδας και υποοµάδων Κατανεµηµένα Συστήµατα 11-19

Οµάδεςνηµάτων int activegroupcount () Επιστρέφει πλήθος ενεργών υποοµάδων της οµάδας int enumerate (Thread[] πίνακας, booleanαναδρ) Αντιγράφει κάθε ενεργό νήµα αυτής της οµάδας σε πίνακα Αν αναδρ == true περιλαµβάνει τις οµάδες παιδιά int enumerate (Thread[] πίνακας) Είναι ισοδύναµη µε int enumerate (Thread[] πίνακας, true) int enumerate (ThreadGroup[] πίνακας, booleanαναδρ) Αντιγράφει τις ενεργές οµάδες της οµάδας αυτής σε πίνακα int enumerate (ThreadGroup[] πίνακας) Είναι ισοδύναµη µε int enumerate (ThreadGroup[] πίνακας, true) Κατανεµηµένα Συστήµατα 11-20

Οµάδεςνηµάτων void checkaccess() Επιστρέφει true αν το τρέχον νήµα έχει πρόσβαση στην οµάδα void interrupt() ιακόπτει όλα τα νήµατα της οµάδας και των υποοµάδων της void destroy() Καταστρέφει την οµάδα και όλες τις υποοµάδες της Η οµάδα πρέπει να είναι κενή! uncaughtexception (Thread νήµα, Throwableεξαίρεση) Καλείται όταν ένα νήµα πεθάνει λόγω ασύλληπτης εξαίρεσης public String tostring () Επιστρέφει συµβολοσειρά µε όνοµα και προτεραιότητα οµάδας public void list() Εµφανίζει την τιµή που επιστρέφει η tostring() για κάθε νήµα Κατανεµηµένα Συστήµατα 11-21