Νιματα - Συγχρονιςμόσ

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

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

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

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

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

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

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

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

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

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

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

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

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

Ειδικά Θζματα Βάςεων Δεδομζνων

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

Ειςαγωγή ςτην πληροφορική

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

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS

Πολυνηµατικές εφαρµογές σε Java

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»

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

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

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

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 2 θ Διάλεξθ - Διεργαςίεσ

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

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

ΙΝΣΙΣΟΤΣΟ ΕΚΠΑΙΔΕΤΣΙΚΗ ΠΟΛΙΣΙΚΗ

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ

Πωσ δθμιουργώ φακζλουσ;

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

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

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

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 9 θ & 10 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Β

ΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ

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

Νήκαηα θαη Σπγρξνληζκόο

Τεχνολογία Λογιςμικού. Έκτη Διάλεξη Πολυπλοκότητα Λογιςμικού Προςεγγίςεισ Ανάλυςησ και Σχεδίαςησ

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

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

8 ΥΜΒΟΛΟΕΙΡΕ - STRINGS

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Διορκώνω τισ εργαςίεσ των ςυμφοιτθτών μου

Αςφάλεια και Προςταςία Δεδομζνων

Ειδικά Θζματα Βάςεων Δεδομζνων

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

Σφντομεσ Οδθγίεσ Χριςθσ

Γαβαλάς Δαμιανός

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

Πειραματικι Ψυχολογία (ΨΧ66)

08 Πολυνηματικός προγραμματισμός στο JVM

Α) Ενδεικτικϋσ απαντόςεισ των θεμϊτων

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων

Κεφάλαιο 6: Δομικι μοντελοποίθςθ

Εισαγωγικές έννοιες. Αντώνησ Κ Μαώργιώτησ

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ

Διαδικαςία Προγράμματοσ Ωρομζτρθςθσ. (v.1.0.7)

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Τεχνικό Σχζδιο - CAD

MySchool Πρακτικζσ οδθγίεσ χριςθσ

Κεφάλαιο 7: Μοντελοποίθςθ ςυμπεριφοράσ

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

ςυςτιματα γραμμικϊν εξιςϊςεων

Προςέγγιςη ςυςτημάτων και μηχανική ςυςτημάτων. Αντώνησ Μαΰργιώτησ

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

Μάρκετινγκ V Κοινωνικό Μάρκετινγκ. Πόπη Σουρμαΐδου. Σεμινάριο: Αναπτφςςοντασ μια κοινωνική επιχείρηςη

Οδηγίεσ για την πρόςβαςη των δικαιοφχων ςτο ΟΠΣΑΑ

Virtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format.

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

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

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

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

Βαςεις δεδομενων 1. Δρ. Αλζξανδροσ Βακαλουδθσ

Τμήματα Μνήμησ Υπολογιςμόσ Φυςικών διευθύνςεων. Εκπαιδεφτρια: Μαρία Πολίτθ

Διαχείριςη έργου. Αντώνησ Μαΰργιώτησ Msc, PhD Πληροφορικήσ

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

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

Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ

Αυτόνομοι Πράκτορες. Αναφορά Εργασίας Εξαμήνου. Το αστέρι του Aibo και τα κόκαλα του

ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΡΤΘΜΙΗ ΔΩΡΕΑΝ ΗΛΕΚΣΡΟΝΙΚΟΤ ΣΑΧΤΔΡΟΜΕΙΟΤ ΣΟ GOOGLE (G-MAIL)

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 θ Διάλεξθ υγχρονιςμόσ Διεργαςιϊν

Ειδικζσ Ναυπηγικζσ Καταςκευζσ και Ιςτιοφόρα κάφη (Ε)

ΘΕΜΑ Α /25 (A1)Χαρακτηρίςτε τισ παρακάτω προτάςεισ ωσ (Σ)ωςτζσ ή (Λ)άθοσ

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

Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων

Multi Logo. Προγραμματιςμόσ Η/Υ με Multi Logo. Σχεδίαςη και ανάπτυξη εφαρμογήσ κίνηςησ αντικειμζνου

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΗ. του ΙΑΣΡΟΦΑΡΜΑΚΕΤΣΙΚΟΤ ΦΑΚΕΛΟΤ ΑΘΕΝΩΝ Για τον ΟΙΚΟ ΝΑΤΣΟΤ ΕΡΓΑΣΗΡΙΑΚΟΙ ΓΙΑΣΡΟΙ. iknowhow Πληροφορική A.E

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 6 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Β

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

ΕΝΟΣΗΣΑ 3: ΧΡΗΗ ΕΡΓΑΛΕΙΩΝ ΕΚΦΡΑΗ ΚΑΙ ΔΗΜΙΟΤΡΓΙΑ

Transcript:

1 Προγραμματιςμόσ ςε Java Νιματα - Συγχρονιςμόσ Παναγιϊτθσ Αδαμίδθσ Τμιμα Μθχανικϊν Πλθροφορικισ Αλεξάνδρειο ΤΕΙ Θεςςαλονίκθσ adamidis@it.teithe.gr

2 Περιεχόμενα 1. Διεργαςίεσ και Νιματα (Processes and Threads) 2. Πολυνθματικόσ Προγραμματιςμόσ (Mulithreaded Programming) 3. Δθμιουργία και Διαχείριςθ Νθμάτων 4. Συγχρονιςμόσ νθμάτων 5. Ηωτικότθτα (Liveness)

Ταυτόχρονοσ Προγραμματιςμόσ 3 (concurrent programming) Ονομάηεται θ μεκοδολογία προγραμματιςμοφ που μασ επιτρζπει να υλοποιιςουμε τθν ταυτόχρονθ εκτζλεςθ διαφόρων εργαςιϊν ςτθν ίδια υπολογιςτικι ςυςκευι. Θ Java είναι ςχεδιαςμζνθ να υποςτθρίηει ταυτόχρονο προγραμματιςμό μζςω τθσ ίδιασ τθσ γλϊςςασ και των βιβλιοκθκϊν τθσ. Εδϊ κα δοφμε τισ βαςικζσ δυνατότθτεσ που διακζτει θ Java για να υποςτθρίξει ταυτόχρονο προγραμματιςμό.

Διεργαςίεσ (Processes) και 4 Νιματα (Threads) Βαςικά ςτοιχεία εκτζλεςθσ ςτον ταυτόχρονο προγραμματιςμό. Java: Ο ταυτόχρονοσ προγραμματιςμόσ ζχει να κάνει κυρίωσ με νιματα (threads). Ζνα υπολογιςτικό ςφςτθμα ζχει πολλζσ ενεργζσ διεργαςίεσ και νιματα, ακόμθ και αν διακζτει μόνο μία μονάδα επεξεργαςίασ (time sharing ι time slicing). Πολλοί επεξεργαςτζσ (multiple processors) ι επεξεργαςτζσ με πολλοφσ πυρινεσ επεξεργαςίασ (multiple execution cores). Δυνατότθτα εκτζλεςθσ ταυτόχρονων διεργαςιϊν και νθμάτων.

5 Διεργαςίεσ (Processes) Δικό τθσ περιβάλλον εκτζλεςθσ:. Γενικά, μία διεργαςία διακζτει ζνα πλιρεσ, ιδιωτικό ςφνολο βαςικϊν πόρων εκτζλεςθσ και κυρίωσ το δικό τθσ χϊρο μνιμθσ. Συχνά ςυνϊνυμο των προγραμμάτων ι των εφαρμογϊν. Όμωσ αυτό που βλζπουν οι χριςτεσ ωσ μία εφαρμογι ςυνικωσ είναι ζνα ςφνολο ςυνεργαηόμενων διεργαςιϊν. Υποςτιριξθ επικοινωνίασ μεταξφ διεργαςιϊν (Inter Process Communication - IPC) από ΛΣ όπωσ διοχετεφςεισ (pipes) και υποδοχζσ (sockets). επικοινωνία μεταξφ των διαδικαςιϊν του ίδιου ςυςτιματοσ αλλά και μεταξφ διαφορετικϊν ςυςτθμάτων JVM: λειτουργεί ωσ μία διεργαςία.

6 Νιματα (Threads) Όπωσ οι διεργαςίεσ (processes), ζτςι και τα νιματα παρζχουν ζνα περιβάλλον εκτζλεςθσ. H δθμιουργία ενόσ νιματοσ απαιτεί λιγότερουσ πόρουσ από ότι θ δθμιουργία μιασ διεργαςίασ. Τα νιματα υπάρχουν μζςα ςτισ διεργαςίεσ. Κάκε διεργαςία ζχει τουλάχιςτον ζνα νιμα. Τα νιματα μοιράηονται τουσ πόρουσ τθσ διεργαςίασ (πχ. μνιμθ και αρχεία). Αυτό αυξάνει τθν απόδοςθ και εξαςφαλίηει αποτελεςματικι, επικοινωνία μεταξφ των νθμάτων.

Πολυνθματικόσ Προγραμματιςμόσ 7 (Mulithreaded Programming) Tαυτόχρονθ εκτζλεςθ πολλϊν νθμάτων μζςα ςτο ίδιο πρόγραμμα. Μποροφμε να κεωριςουμε ζνα νιμα που εκτελείται ωσ μία CPU που εκτελεί το πρόγραμμα. Πολλά νιματα που εκτελοφν το ίδιο πρόγραμμα πολλζσ CPU που εκτελοφν το ίδιο πρόγραμμα. Ο πολυνθματιςμόσ (multithreading) είναι ζνασ πολφ καλόσ τρόποσ να βελτιϊςουμε τθν εκτζλεςθ κάποιων προγραμμάτων.

Πολυνθματικόσ Προγραμματιςμόσ Πλεονεκτιματα 8 καλφτερθ χριςθ των διακζςιμων πόρων πιο απλά προγράμματα ςε κάποιεσ περιπτϊςεισ καλφτερθ απόκριςθ των προγραμμάτων

Πολυνθματικόσ Προγραμματιςμόσ Μειονεκτιματα 9 Πρόςβαςθ ςε διαμοιραηόμενουσ πόρουσ Εναλλαγι περιβάλλοντοσ (context switch) Χριςθ επιπλζον πόρων. Πολυπλοκότθτα αποςφαλμάτωςθσ Ζλλειψθ ςυμβατότθτασ με υπάρχοντα κϊδικα

10 Δθμιουργία και Διαχείριςθ Νθμάτων Θ πολυνθματικι (multithreaded) εκτζλεςθ είναι ζνα βαςικό ςτοιχείο τθσ Java. Κάκε εφαρμογι διακζτει τουλάχιςτον ζνα νιμα και ξεκινάει με τθν εκτζλεςθ ενόσ μόνο νιματοσ το κφριο νιμα (main thread). Αυτό το νιμα ζχει τθν δυνατότθτα δθμιουργίασ και άλλων νθμάτων. Μία εφαρμογι θ οποία δθμιουργεί ζνα νιμα πρζπει να παρζχει και τον κϊδικα που κα εκτελεςτεί ςε αυτό. Τα νιματα τθσ Java είναι αντικείμενα όπωσ και τα υπόλοιπα αντικείμενα τθσ Java με τθν επιπλζον δυνατότθτα εκτζλεςθσ κϊδικα.

11 Δθμιουργία Νθμάτων - (1) Ζνα νιμα είναι ςτιγμιότυπο τθσ κλάςθσ Thread. Δθμιουργία νιματοσ με χριςθ του δομθτι τθσ Thread: Thread thread = new Thread(); Εκκίνθςθ εκτζλεςθσ για το αντικείμενο thread : thread.start(); Υπζρβαςθ τθσ μεκόδου run()

12 Δθμιουργία Νθμάτων - (2) Δφο τρόποι δθμιουργίασ νιματοσ: xριςθ αναφοράσ αντικειμζνου που υλοποιεί τθ διαςφνδεςθ Runnable κατά τθ δθμιουργία του νιματοσ ςτον δομθτι (constructor) τθσ Thread. Κλθρονομϊντασ/επεκτείνοντασ τθ κλάςθ Thread και τθν ακόλουκθ δθμιουργία αντικειμζνου τθσ υποκλάςθσ

13 Με υλοποίθςθ Runnable public class MyHelloRunnable implements Runnable { public void run() { System.out.println("Hello Runnable thread!"); public static void main(string args[]) { Thread mhr = new Thread(new MyHelloRunnable()); mhr.start(); /* or (new Thread(new MyHelloRunnable())).start(); */

14 Με επζκταςθ Thread public class MyHelloThread extends Thread { public void run() { System.out.println("Hello my thread!"); public static void main(string args[]) { MyHelloThread mht = new MyHelloThread(); mht.start(); /* or (new MyHelloThread()).start(); */

Παράδειγμα: Δθμιουργία, εμφάνιςθ 15 ονόματοσ νθμάτων public class ThreadExample { public static void main(string[] args){ System.out.println(Thread.currentThread().getName()); for(int i=0; i<10; i++){ new Thread("Νήμα-" + i){ public void run(){ System.out.println("Εκηελείηαι ηο: " + getname() + " running");.start(); // for //main

16 Μζκοδοι κλάςθσ Thread (static) public static Thread currentthread() public static boolean holdslock(object obj) public static boolean interrupted() public static void sleep(long millisec) public static void yield()

Μζκοδοι κλάςθσ Thread (instance) 17 public String getname() public int getpriority() public void interrupt() public boolean isalive() public boolean isdaemon() public boolean isinterupted() public final void join(long millisec) public void run() public final void setdaemon(boolean on) public final void setname(string name) public final void setpriority(int priority) public void start()

Χρόνοσ ηωισ νιματοσ 18 Thread life cycle

19 Συγχρονιςμόσ νθμάτων Σε μια πολυνθματικι εφαρμογι όπου πολλά νιματα εκτζλεςθσ διαχειρίηονται τουσ ίδιουσ πόρουσ, κα πρζπει να υπάρχει ςυγχρονιςμόσ των διεργαςιϊν ζτςι ϊςτε να υπάρχει θ ςωςτι πρόςβαςθ ςτουσ διακζςιμουσ πόρουσ, αλλιϊσ τα αποτελζςματα ενδζχεται να είναι καταςτροφικά. Γενικά το πρόβλθμα ςυγχρονιςμοφ διεργαςιϊν είναι αρκετά πολφπλοκο και δφςκολο, αφοφ εκτόσ από το να παρζχει τθ δυνατότθτα αποκλειςτικισ χριςθσ των διακζςιμων πόρων, ζνασ μθχανιςμόσ ςυγχρονιςμοφ πρζπει να εξαςφαλίηει και τθν αποφυγι αδιεξόδων.

20 Μθχανιςμόσ ςυγχρονιςμοφ Java Σχετικά απλόσ και εφχρθςτοσ. Βαςίηεται ςτθν ζννοια του ςυγχρονιςμοφ και του κλειδϊματοσ (lock). Κάκε αντικείμενο ζχει ζνα δικό του κλείδωμα. Όταν ζνα νιμα χρειάηεται αποκλειςτικι πρόςβαςθ ςτο αντικείμενο τότε καταλαμβάνει το αντίςτοιχο κλείδωμα, εκτελεί τισ λειτουργίεσ του και όταν τελειϊςει ελευκερώνει το κλείδωμα. Όςο το νιμα κατζχει το κλείδωμα, κανζνα άλλο νιμα δεν ζχει πρόςβαςθ ςτο αντικείμενο.

21 Μθχανιςμόσ ςυγχρονιςμοφ Java (2) Το κλείδωμα επιλφει πικανζσ ςυνκικεσ ανταγωνιςμοφ και εξαςφαλίηει ςυνκικεσ προιγθςθσ. Δφο επίπεδα ςυγχρονιςμοφ: συγχρονισμζνες μεκόδους (synchronized methods) και συγχρονισμζνα τμιματα εντολών (synchronized blocks).

Χριςθ ςυγχρονιςμζνων τμθμάτων 22 κϊδικα Επιτρζπει τον ςυντονιςμό των διαφόρων νθμάτων εκτζλεςθσ. Στα ςυγχρονιςμζνα τμιματα ζχουμε τουσ διαμοιραηόμενουσ πόρουσ. synchronized(objectidentifier) { // Πρόζβαζη ζε διαμοιραζόμενοσς πόροσς Objectidentifier: αναφορά ςε ζνα αντικείμενο του οποίου το κλείδωμα ςυνδζεται με τον πόρο που αναπαριςτάται ςτθν πρόταςθ ςυγχρονιςμοφ.

Παράδειγμα ςυγχρονιςμζνου τμιματοσ κϊδικα -1 23 class PrintDemo { public void printcount(){ try { for(int i = 4; i > 0; i--) System.out.println("Μετρθτισ: " + i ); catch (Exception e) { System.out.println("Thread interrupted.");

Παράδειγμα ςυγχρονιςμζνου τμιματοσ κϊδικα - 2 class ThreadDemo extends Thread { private Thread t; private String threadname; PrintDemo PD; ThreadDemo( String name, PrintDemo pd){ threadname = name; PD = pd; public void run() { public synchronized(pd) void run() { { PD.printCount(); System.out.println(threadName + "...terminating."); public void start () { System.out.println("Starting " + threadname ); if (t == null) { t = new Thread (this, threadname); t.start (); System.out.println(threadName + "...terminating."); 24

Παράδειγμα ςυγχρονιςμζνου τμιματοσ κϊδικα - 3 25 public class TestThreadNoSync { public static void main(string args[]) { PrintDemo PD = new PrintDemo(); ThreadDemo T1 = new ThreadDemo( "Νιμα 1 ", PD ); ThreadDemo T2 = new ThreadDemo( "Νιμα 2 ", PD ); ThreadDemo T3 = new ThreadDemo( "Νιμα 3 ", PD ); T1.start(); T2.start(); T3.start(); try { T1.join(); T2.join(); T3.join(); catch( Exception e) { System.out.println("Interrupted");

Παράδειγμα ςυγχρονιςμζνου τμιματοσ κϊδικα - Ζξοδοσ 26 Starting Νήμα 1 Starting Νήμα 2 Starting Νήμα 3 Μετρητής: 4 Μετρητής: 3 Μετρητής: 2 Μετρητής: 1 Νήμα 1...terminating. Μετρητής: 4 Μετρητής: 3 Μετρητής: 2 Μετρητής: 1 Νήμα 2...terminating. Μετρητής: 4 Μετρητής: 3 Μετρητής: 2 Μετρητής: 1 Νήμα 3...terminating.

27 Συγχρονιςμζνεσ μζκοδοι Τόςο οι μζκοδοι static όςο και οι μζκοδοι αντικειμζνων μπορεί να είναι ςυγχρονιςμζνεσ (synchronized). public synchronized void add(int value){ this.count += value; Θ χριςθ τθσ λζξθσ κλειδί synchronized ςτθ διλωςθ τθσ μεκόδου ενθμερϊνει τθ Java ότι θ μζκοδοσ είναι ςυγχρονιςμζνθ. Μόνο ζνα νιμα μπορεί να εκτελείται ςε μια ςυγχρονιςμζνθ μζκοδο κάποιου αντικειμζνου. Εάν υπάρχουν περιςςότερα αντικείμενα, τότε μόνο ζνα νιμα τθ φορά μπορεί να εκτελείται ςε μια μζκοδο. Ζνα νιμα ανά αντικείμενο.

Παράδειγμα ςυγχρονιςμζνων μεκόδων - 1 28 public class Counter{ private long count = 0; public synchronized void add(long value){ this.count += value; public class CounterThread extends Thread{ private Counter counter = null; public CounterThread(Counter counter){ this.counter = counter; public void run() { for(int i=0; i<10; i++) counter.add(i);

Παράδειγμα ςυγχρονιςμζνων μεκόδων - 2 29 public class Example { public static void main(string[] args){ Counter counter = new Counter(); Thread t1 = new CounterThread(counter); Thread threadb = new CounterThread(counter); t1.start(); t2.start();

30 Παράδειγμα ςυγχρονιςμζνων μεκόδων - 3 public class Example { public static void main(string[] args){ Counter countera = new Counter(); Counter counterb = new Counter(); Thread t1 = new CounterThread(counterA); Thread t2 = new CounterThread(counterB); t1.start(); t2.start();

31 Ηωτικότθτα (Liveness) Θ δυνατότθτα μιασ πολυνθματικισ εφαρμογισ ι γενικότερα μιασ ταυτόχρονθσ (concurrent)εφαρμογισ να εκτελείται χωρίσ υπερβολικζσ κακυςτεριςεισ (ζγκαιρα) ονομάηεται ηωτικότθτα τθσ εφαρμογισ. Τα πιο κοινά προβλιματα, τα οποία επθρεάηουν τθ ηωτικότθτα των εφαρμογϊν είναι: το αδιζξοδο (deadlock), το ενεργό αδιζξοδο (livelock) και θ παρατεταμζνθ ςτζρθςθ/λιμοκτονία (starvation).