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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Διάλεξη 22: Συγχρονισμός (Concurrency) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διεργασίες (processes) και Νήματα (threads) - Συγχρονισμός Νημάτων, Προβλήματα, Λύσεις - Οι τροποποιητές <synchronized>, <volatile> - Διαχείριση Συγχρονισμού Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

2 Εισαγωγή Τι είναι ένα νήμα? Νήμα αποκαλείται η ελάχιστη οντότητα επεξεργασίας που μπορεί να δρομολογηθεί από το λειτουργικό σύστημα. Σε κάποια λειτουργικά συστήματα αποκαλούνται και Lightweight Processes Ποίο είναι το πιο κοινό πρόβλημα που μπορεί να προκύψει με την ταυτόχρονη εκτέλεση διεργασιών? Η ταυτόχρονη πρόσβαση σε κοινούς πόρους του συστήματος Πως αντιμετωπίζεται? Με τεχνικές αμοιβαίου αποκλεισμού των προσβάσεων. Ποια λύση προτείνεται από την Java? Αρκετές, ανάμεσα στις οποίες είναι οι: Synchronizedmethods, Synchronized blocks, Atomic access, Locks, ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

3 Νήματα (Threads) Το νήμα (thread)αποτελεί μία μοναδική, ακολουθιακή ροή ελέγχου μέσα σε ένα πρόγραμμα. Στα σύγχρονα συστήματα βρίσκονται σχεδόν σε όλες τις εφαρμογές (π.χ., DOS vs. Windows) Τα threads μπορούν να τρέχουν σε ένα υπολογιστή ή σε πολλαπλούς υπολογιστές Πολλαπλά threads Πολλαπλά CPUs thread 1 thread 2 thread 3 CPU1 CPU2 CPU3 Πολλαπλά threads Ένα CPU thread 1 thread 2 thread 3 CPU1 CPU1 CPU1 CPU1 CPU1 t ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

4 Διεργασίες (processes) vs. Νήματα(threads) Στον συντρέχον προγραμματισμό (concurrent programming), υπάρχουν δύο βασικά είδη εκτέλεσης: διεργασίες και νήματα. Ένα σύστημα έχει τυπικά πολλά ενεργά processes and threads. Αν υπάρχει μόνο ένας επεξεργαστής, τότε ο χρόνος (και πόροι) του μοιράζονταιστα processes and threads μέσω της τεχνικής time slicing που παρέχεται από το λειτουργικό σύστημα. Διεργασία (process) Ένα process έχει το δικό της αυτοδύναμο περιβάλλον εκτέλεσης: ξεχωριστό κομμάτι μνήμης και προσωπικούς πόρους Μία εφαρμογή περιλαμβάνει ένα σύνολο από processes που συνεργάζονται Η επικοινωνία μεταξύ τους (εντός και εκτός του ίδιου συστήματος) γίνεται μέσω τεχνικών όπως Pipes και Sockets (Inter Process Communication (IPC) Στην JAVA, μία εφαρμογή τρέχει σαν ένα process αλλά μπορεί να δημιουργήσει περισσότερα processes μέσω της κλάσης ProcessBuilder Παράδειγμα: ProcessBuilder builder = new ProcessBuilder("calc.exe"); builder.start(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

5 Διεργασίες (processes) vs. Νήματα(threads)(συν.) Νήμα (thread) Τα threadsονομάζονται και lightweight processes. Τα processes και threads παρέχουν ένα περιβάλλον εκτέλεσης Ένα thread χρειάζεται (δεσμεύει και χρησιμοποιεί) πιο λίγους πόρους από ένα process. Τα threadsυπάρχουν μέσα σε ένα processκαι ένα process έχει τουλάχιστον ένα thread. Τα threads μοιράζονται τους πόρους μίας διεργασίας (μνήμη, αρχεία, κτλ.) Η πολυπλοκότητα τους βρίσκεται στο θέμα της επικοινωνίας Στην JAVA κάθε εφαρμογή ξεκινάει αρχικά με ένα thread (main thread) Αυτή μπορεί να ξεκινήσει πολλά άλλα threads Στα μοντέρνα συστήματα, υπάρχουν πολλαπλοί επεξεργαστές, ή και επεξεργαστές με πολλαπλούς πυρήνες που υποστηρίζουν πιο αποδοτική εκτέλεση του συντρέχων προγραμματισμού ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

6 Δημιουργία και Εκκίνηση threads Κάθε thread σχετίζεται με ένα αντικείμενο της κλάσης Thread Μία εφαρμογή μπορεί να δημιουργήσει threads με δύο τρόπους 1. Με τη δημιουργία ενός αντικειμένου που υλοποιεί την διαπροσωπεία (interface) Runnable Το interface Runnable ορίζει μία μέθοδο (run()) η οποία θα έχει τον κώδικα εκτέλεσης του συγκεκριμένου thread Το αντικείμενο Runnable περνάει σαν παράμετρος στον κατασκευαστή της Thread Παράδειγμα public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); public static void main(string args[]) { ( new Thread( new HelloRunnable() ) ).start(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

7 Δημιουργία και Εκκίνηση threads(συν.) 2. Με την δημιουργία ενός αντικειμένου που κληρονομεί από την Thread Η κλάση Thread υλοποιεί την Runnableαλλά η μέθοδος run δεν κάνει τίποτα. method does nothing. An application can subclass Thread, providing its own implementation of run Παράδειγμα public class HelloThread extends Thread{ public void run() { System.out.println("Hello from a thread!"); public static void main(string args[]) { (new HelloThread()).start(); Ο πρώτος τρόπος είναι πιο γενικός και επίσης επιτρέπει την κληρονομικότητα από άλλες κλάσεις εκτός του Thread ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

8 H κλάση Thread Πιο σημαντικοί Κατασκευαστές Thread(): Δημιουργία ενός thread Thread(Runnable target): Δημιουργία thread για κάποιο task Πιο σημαντικές Μεθόδοι void start(): εκκίνηση ενός thread void yield(): επιτρέπει σε άλλα threads να τρέξουν πρώτα void sleep(long millis): το thread κοιμάται για κάποιο χρόνο void setpriority(int newp): αλλαγή προτεραιότητας (1..10) void interrupt(): διακόπτει το thread void join(): περιμένει μέχρι το thread να τελειώσει την εκτέλεσή booleanisalive(), isinterrupted():επιστρέφουν την κατάσταση του thread (π.χ., αν τρέχει, αν είναι τύπου daemon, αν έχει διακοπεί) void wait(): το thread μπαίνει σε κατάσταση waiting μέχρι να γίνει notify()ή notifyall() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

9 Παράδειγμα: Δημιουργία και Εκκίνηση threads public class TaskThreadDemo { public static void main(string[] args) { Runnable printa = new PrintChar('a', 10); Runnable printb = new PrintChar('b', 10); Runnable print10 = new PrintNum(10); Thread thread1 = new Thread(printA); Thread thread2 = new Thread(printB); Thread thread3 = new Thread(print10); thread1.start(); thread2.start(); thread3.start(); class PrintChar implements Runnable { private char chartoprint; // character to print private int times; // The times to repeat public PrintChar(char c, int t) { chartoprint = c; times = t; //Override the run() method public void run() { for (int i = 0; i < times; i++) { System.out.println(charToPrint); class PrintNum implements Runnable { private int lastnum; public PrintNum(int n) { lastnum = n; public void run() { for (int i = 1; i <= lastnum; i++) { System.out.println(" " + i); Δημιουργία tasks: Αντικείμενα κλάσεων που υλοποιούν την Runnable Δημιουργία threads: Πέρασμα στον κατασκευαστή της Thread των αντικειμένων που υλοποιούν την Runnable Εκκίνηση των 3 threads Υλοποίηση της διαπροσωπείας Runnable από δύο κλάσεις Υπερκάλυψη (override) της μεθόδου run() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

10 Συγχρονισμός Νημάτων (Thread Synchronization) Τα νήματα επικοινωνούν μεταξύ τους μέσω κοινών πόρων (π.χ., μία μεταβλητή) Αυτή η μορφή επικοινωνίας είναι πολύ αποδοτική γιατί δεν χρειάζεται η δημιουργία αντιγράφων των κοινών πόρων Όμως, μπορεί να παρουσιάσει δύο είδη προβλημάτων: Παρεμβολές (Thread Interference):δύο threads έχουν πρόσβαση στα ίδια δεδομένα ταυτόχρονα Λάθη Ασυνέπειας στην Μνήμη (Memory Consistency Errors): όταν υπάρχουν ασυνέπειες στην όψη της μνήμης, π.χ., παρουσίαση δύο διαφορετικών τιμών για την ίδια μεταβλητή Η λύση για να αποφύγουμε αυτά τα προβλήματα είναι ο συγχρονισμός ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

11 Παράδειγμα Παρεμβολών (Thread Interference) class Counter { private int c = 0; public int getvalue() { return c; public void setvalue(int newc) { c=newc; Οι παρεμβολές συμβαίνουν υπάρχουν περισσότερα το ενός βημάτων σε πολλαπλά threads και αυτά υπερκαλύπτονται μεταξύ τους public class Main { public static void main(string[] args) { final Counter c = new Counter(); (new Thread( new Runnable() { public void run() { int x = c.getvalue(); x = x + 1; c.setvalue(x); )).start(); (new Thread( new Runnable() { public void run() { int x = c.getvalue(); x = x - 1; c.setvalue(x); )).start(); Thread A Thread B Σενάριο 1. Thread A: Ανάκτηση του c 2. Thread B: Ανάκτηση του c 3. Thread A: Αύξηση του x(x=1) 4. Thread Β: Μείωση του x(x=-1) 5. Thread A: Αποθήκ. του x(c=1) 6. Thread B: Αποθήκ. του x(c=-1) 7. Thread A: (Πρόβλημα) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

12 Παράδειγμα Λάθη Ασυνέπειας στην Μνήμη class Counter { private int c = 0; public void increment() { c++; Object o = new Object(); public void decrement() { c--; public void value() { System.out.println("c="+c); public class Main { public static void main(string[] args) { final Counter c = new Counter(); (new Thread( new Runnable() { public void run() { c.increment(); c.value(); )).start(); (new Thread( new Runnable() { public void run() { c.decrement(); c.value(); )).start(); Thread A Thread B Οι ασυνέπειες συμβαίνουν όταν τα νήματα έχουν διαφορετικές όψεις των ίδιων δεδομένων Πιθανές εκδοχές εκτύπωσης του διπλανού προγράμματος: c=1, c=0 (Σωστό) c=-1, c=0(λάθος) c=0, c=0(λάθος) c=-1, c=1 (Μπορεί να γίνει;;;) Μπορούν να αποφευχθούν (όχι πάντα) με την χρήση της σχέσης (happens-before) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

13 Προσδιοριστής <synchronized> Στα προηγούμενα παραδείγματα, παρουσιάζεται πρόβλημα επειδή δύο threads έχουν πρόσβαση και μεταβάλλουν τον ίδιο πόρο Το πρόβλημα αυτό ονομάζεται race condition Για να αποφύγουμε τα race conditions μπορούμε να χρησιμοποιήσουμε τον προσδιοριστή synchronized thread-safe κώδικας synchronized: κανένα thread δεν μπορεί να έχει πρόσβαση στους πόρους της εμβέλειας του ταυτόχρονα με το τρέχων thread Μπορεί να δηλωθεί στο πεδίο εμβέλειας μίας μεθόδου Όλοι οι πόροι που σχετίζονται με το αντικείμενο που βρίσκεται η μέθοδος κλειδώνεται (lock) μέχρι να τερματίσει η μέθοδος Μπορεί να δηλωθεί σε συγκεκριμένο πεδίο εμβέλειας κώδικα Μόνο οι πόροι (αντικείμενο) που καθορίζονται από το συγκεκριμένο πεδίο εμβέλειας κώδικα κλειδώνονται ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

14 Παράδειγμα <synchronized> μεθόδοι class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; public synchronized void decrement() { c--; public synchronized int value() { return c; Τι έχουμε πετύχει; Δεν υπάρχει περίπτωση υπερκάλυψης των μεθόδων του ίδιου αντικειμένου Όταν καλέσουμε μία μέθοδο, τότε αφού αυτή πρέπει να τελειώσει για να αφήσει το lock, έχουμε πετύχει αυτόματα την σχέση happens-before, δηλ. ότι μέθοδος ακολουθήσει θα έχει την ίδια όψη αντικειμένου Απλή και αποδοτική μέθοδος ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

15 Συγχρονισμός συγκεκριμένων αντικειμένων Ο μηχανισμός του συγχρονισμού σχετίζεται με το κλείδωμα συγκεκριμένων αντικειμένων Όταν προσθέτουμε το synchronized σε μία μέθοδο σημαίνει ότι έμμεσα κλειδώνουμε το αντικείμενο που βρίσκεται στην μέθοδο Μερικές φορές όμως μπορεί να θέλουμε να κλειδώσουμε άλλα αντικείμενα Μπορούμε να το κάνουμε με την δήλωση: synchronize(object){ Ονομάζεται και synchronized block. Αν το αντικείμενο είναι ήδη κλειδωμένο από κάποιο άλλο thread Β τότε όταν καλεστεί η μέθοδος από το thread A θα πρέπει να περιμένει μέχρι να τελειώσει την εκτέλεση το thread B(ξεκλείδωμα) Παρατήρηση: Μία δήλωση synchronized method() { είναι ισοδύναμη με method() { synchronized(this) { ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

16 Συγχρονισμός με προστατευόμενα πλαίσια Συγχρονισμός με προστατευόμενα πλαίσια (guarded blocks) επιτυγχάνεται με τις εντολές wait(), notify() και notifyall() Δεν μπορούν ποτέ να υπερσκελιστούν(δηλώνονται final). Μπορούν να κληθούν μόνο μέσα από τομείς που δηλώνονται ως synchronized. Υλοποιούν τη λογική της αναμονής κάποιου γεγονότος το οποίο θα σηματοδοτηθεί από κάποιο άλλο Thread. Όταν ένα Threadεισέλθει σε κατάσταση wait, αναστέλλεται μέχρι να αφυπνιστεί από κάποιο άλλο Thread. Επίσης ελευθερώνει το αντικείμενο το οποίο είχε κλειδώσει όταν εισήλθε στο synchronized block. Η αφύπνιση του Threadπροκαλείται από κάποιο άλλο Threadτο οποίο έχει τα δικαιώματα πρόσβασης στο ίδιο αντικείμενο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 16

17 Συγχρονισμός με προστατευόμενα πλαίσια (συν.) Η αφύπνιση γίνεται με την εντολή notify() Όταν κληθεί η notify() το Threadπου είχε το δικαίωμα πρόσβασης το παραχωρεί στο Thread που είχε ανασταλεί στη συνάρτηση wait(). Προσοχή: Στη συνάρτηση notify() δε δηλώνουμε τι να αφυπνιστεί. Για το λόγο αυτό αν περιμένουν περισσότερα του ενός Threadδε ξέρουμε ποιο θα ξυπνήσει. Παρατηρήσεις Η notify() αφυπνίζει μόνο 1 thread. Η notifyall() αφυπνίζει όλα τα threads. Η εντολή notify() μπορεί μόνο να αφυπνίσει ένα Τhreadπου υπήρχε στην ουρά αναμονής. Η notify() είναι ασφαλής υπό 2 συνθήκες μόνο: Όταν και μόνο όταν υπάρχει ένα threadσε αναμονή. Όταν πολλά threadείναι σε αναμονή αλλά δεν υπάρχει ιδιαίτερη σημασία ποιο από όλα θα ξυπνήσει. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

18 Παράδειγμα συγχρονισμού με guarded blocks Espresso Bar (Παραγωγή / Κατανάλωση) Χρησιμοποιούμε ένα πάγκο (buffer)όπου τοποθετούμε τα espressos που παράγει ο barrista. O πάγκος (buffer) έχει περιορισμένη χωρητικότητα (CAPACITY) Υπάρχει μία μεταβλητή count που μετράει τα διαθέσιμα espresso στον πάγκο O barristaέχει τη μέθοδο createespresso() που δημιουργεί ένα espressoκαι ο πελάτης την μέθοδο drinkespresso() που πίνει ένα espresso Δημιουργία Καφέ Παράδοση Καφέ while (count == CAPACITY) wait() while(count==0) wait() createespresso() drinkespresso() notifyall() notifyall() Ερώτηση: Χρειαζόμαστε τους βρόγχους while και τις συνθήκες τους; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 18

19 Συγχρονισμός με locks Όπως έχουμε πει, μία synchronized μέθοδος έμμεσα κλειδώνει το στιγμιότυπο της κλάσης (αντικείμενο) πριν να εκτελέσει την μέθοδο Το JDK 1.5 (και αργότερα) επιτρέπουν στον προγραμματιστή να δημιουργήσει άμεσα τα locks Αυτό δίνει περισσότερη ευελιξία για τον έλεγχο και το συγχρονισμό threads Ένα lock είναι ένα στιγμιότυπο κλάσης που υλοποιεί την διαπροσωπεία java.util.concurrent.locks.lock Η διαπροσωπεία Lock δηλώνει μεθόδους για την δημιουργία και απελευθέρωση locks Επίσης, παρέχει την μέθοδο newcondition() για την δημιουργία προϋποθέσεων (αντικειμένων τύπου Condition) για την επικοινωνία και συντονισμό threads. Γνωστή κλάση που υλοποιεί την Lock είναι η ReentrantLockπου επιβάλει μία δίκαιη πολιτική locks ώστε να μην παρουσιάζονται προβλήματα starvation (π.χ., threads που περιμένουν το περισσότερο έχουν προτεραιότητα) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 19

20 Συγχρονισμός με locks(συν.) Δημιουργία και αρχικοποίηση αντικειμένου τύπου Lock Lock lock = new ReentrantLock(); Μεθόδοι lock(), lockinterruptibly():απόκτηση lockκαι απόκτηση lock αν δεν έχει γίνει interrupt το τρέχον thread unlock(): απελευθέρωση του lock trylock(), trylock(long time, TimeUnitunit):προσπάθεια απόκτησης του lock αν είναι διαθέσιμο (και σε συγκεκριμένο χρονικό διάστημα) newcondition():δημιουργία καινούριας συνθήκες (επόμενη διαφάνεια) Παράδειγμα χρήσης σε μία μέθοδο lock.lock(); /* δηλώσεις */ lock.unlock(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

21 Συγχρονισμός με locks(συν.) Τα conditions χρησιμοποιούνται για επίτευξη επικοινωνίας μεταξύ threads Ένα thread μπορεί να προσδιορίσει τι θα κάνει κάτω από συγκεκριμένες συνθήκες Δημιουργούνται με την μέθοδο newcondition() σε Lock αντικείμενα Για την επικοινωνία χρησιμοποιούνται οι μεθόδοι: await():το thread περιμένει μέχρι η συνθήκη να γίνει σηματοδότηση (signal) signal():σηματοδοτεί ότι ένα thread που περιμένει πρέπει να ξύπνησε signalall(): Όπως το signal() αλλά όλα τα threads που περιμένουν await(long time, TimeUnit unit) long awaitnanos(long nanostimeout), void awaituninterruptibly(), boolean awaituntil(date deadline) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

22 Συγχρονισμός με locks(συν.) Παράδειγμα BankAccount με διαδικασίες Κατάθεση/Ανάληψη Ανάληψη Κατάθεση lock.lock() lock.lock() while(balance<withdraw amount) newdeposit.await(); balance += withdraw Amount balance-= withdraw Amount newdeposit.signalall(); lock.unlock() lock.unlock() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 22

23 Καταστάσεις ενός thread (java.lang.thread.state) new Thread() New (NEW) start() Sleeping (TIMED_WAITING) Timer expired Runnable (RUNNABLE) Access granted sleep() Scheduler Running (RUNNABLE) Access blocking resource (e.g., I/O) Blocking (BLOCKED) notify(), notifyall() Waiting (WAITING) wait(), yield run() completed or stop() Dead (TERMINATED) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 23

24 Ατομική Πρόσβαση (Atomic Access) Ένας άλλος τρόπος για επίτευξη του συγχρονισμού είναι μέσα από τον καθορισμό ατομικών μεταβλητών Μία ατομική ενέργεια (atomic action)είναι μία ενέργεια η οποία συμβαίνει όλη την ίδια στιγμή, αλλιώς δεν συμβαίνει καθόλου, δηλ. δεν μπλοκάρει Τα atomic actionsδεν μπορούν να υπερκαλυφθούν γι αυτό και δεν μπορεί να υπάρξει πρόβλημα παρεμβολών Αυτό δεν σημαίνει ότι δεν μπορούν να υπάρξουν ασυνέπειες μνήμης γι αυτό και μπορεί να πρέπει να καθοριστούν σαν synchronized Χρησιμοποιώντας πρόσβαση ατομικών μεταβλητών είναι πιο αποδοτικό από synchronized κώδικα αλλά χρειάζονται περισσότερη προσπάθεια από τον προγραμματιστή Κάποιες από τις κλάσεις που βρίσκονται στην κεντρική βιβλιοθήκη του συγχρονισμού (java.util.concurrent)περιλαμβάνουν ατομικές μεθόδους που δεν βασίζονται στον συγχρονισμό. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 24

25 Ατομική Πρόσβαση (Atomic Access)(συν.) Τα αντικείμενα και οι Αρχέγονοι τύποι μπορούν να δηλωθούν ως ατομικοί χρησιμοποιώντας τον τροποποιητή volatile Η λέξη κλειδί volatileενημερώνει τον compilerότι η συγκεκριμένη κατάσταση (μεταβλητή) θα έχει πρόσβαση από περισσότερα του ενός Threads. Η μεταβλητή που δηλώνεται volatileδεν αποθηκεύεται ποτέ στην cache του Thread. Διαφορές μεταξύ volatile και synchronized Χαρακτηριστικό synchronized volatile Τύπος Μεταβλητής Αντικείμενο Αντικείμενο, Αρχέγονοι Τύποι Επιτρέπεται το null; OXI NAI Μπορεί να μπλοκάρει; ΝΑΙ ΌΧΙ Πότε γίνεται ο συγχρονισμός; Κάλεσμα/Εκτέλεση της μεθόδου Πρόσβαση στην μεταβλητή Συνδυασμόςπολλαπλών λειτουργιών σε ένα ατομικό block NAI JAVA 1.4: OXI JAVA 1.5: NAI ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 25

26 Παράδειγμα τροποποιητή <volatile> public class VolatileTest { volatile boolean running = true; public void test() { new Thread(new Runnable() { public void run() { int counter = 0; while (running) { counter++; System.out.println("Thread 1 finished.counted up to "+counter); ).start(); new Thread(new Runnable() { public void run() { // Sleep for a bit so that thread 1 has a chance to start try { Thread.sleep(100); catch (InterruptedException ignored) { System.out.println("Thread 2 finishing"); running = false; ).start(); public static void main(string[] args) { new VolatileTest().test(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 26

27 Προβλήματα Συγχρονισμού Οι τεχνικές του συγχρονισμού μπορούν να μειώσουν κατά πολύ τα προβλήματα των παρεμβολών και της ασυνέπειας μνήμης Φυσικά, αυτό εναπόκειται και στις προγραμματιστικές ιδιότητες του προγραμματιστή Παρουσιάζουν όμως κάποια άλλα προβλήματα τα οποία έχουν σχέση με την ζωή των threads Τα πιο σημαντικά προβλήματα συγχρονισμού είναι: (Νεκρό) Αδιέξοδο (Deadlock):Κάθε thread περιμένει ανενεργά ένα lock από κάποιο άλλο thread που με τη σειρά του περιμένει ένα lock από άλλο thread(διαδοχικά μέχρι το πρώτο thread) Λιμοκτονία (Starvation):κάποια thread περιμένουν για μεγάλα χρονικά διαστήματα κάποιους locked πόρους Ζωντανό Αδιέξοδο (Livelock):το ίδιο με το deadlock αλλά τα threads είναι ενεργά ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 27

28 Παράδειγμα Προβλημάτων Συγχρονισμού DeadLock Αλγόριθμος περάσματος διαδρόμου: 1. Αν έχει κάποιο απέναντι σου στην ίδια λωρίδα, τότε περίμενε μέχρι να μετακινηθεί 2. Αλλιώς προχώρησε μπροστά Αποτέλεσμα: καμία μετακίνηση από τα δύο άτομα, ποτέ! LiveLock Αλγόριθμος περάσματος διαδρόμου: 1. Αν έχει κάποιο απέναντι σου στην ίδια λωρίδα, μετακινήσου στην άλλη λωρίδα 2. Αλλιώς προχώρησε μπροστά Αποτέλεσμα: συνεχής μετακίνηση αριστερά-δεξιά από τα δύο άτομα Starvation Αλγόριθμος διεκπεραίωσης παραγγελιών εστιατορίου: ΔΙΑΔΡΟΜΟΣ 1. Κάθε χρονική στιγμή επέλεγε την παραγγελία που κοστίζει περισσότερο Αποτέλεσμα:Υποθέτοντας μία παραγγελία το λεπτό και χρόνο διεκπεραίωσης > του ενός λεπτό η παραγγελία με το πιο μικρό κόστος θα εξυπηρετηθεί τελευταία ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 28

29 Διαχείριση Συγχρονισμού Τα προηγούμενα παραδείγματα τρέχουν αποδοτικά για μικρές εφαρμογές Σε μεγάλες εφαρμογές είναι καλύτερα να διαχωρίζεται η διαχείριση των threads από την υπόλοιπη εφαρμογή (π.χ., Web Server) Τα υπεύθυνα αντικείμενα για την διαχείριση των threads είναι οι εκτελεστές (executors) Στην βιβλιοθήκη java.util.concurrent ορίζονται 3 executor interfaces: Executor:υποστηρίζει την δημιουργία και εκτέλεση καινούριων threads ExecutorService:,ελέγχει τον κύκλο ζωής ενός executor και των threads του. ScheduledExecutorService:υποστηρίζει την περιοδική εκτέλεση των threads ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 29

30 Παράδειγμα Διαχείρισης Συγχρονισμού import java.util.concurrent.*; public class ExecutorDemo { public static void main(string[] args) { // Create a fixed thread pool with maximum three threads ExecutorService executor = Executors.newFixedThreadPool(3); // Submit runnable tasks to the executor executor.execute(new PrintChar('a', 100)); executor.execute(new PrintChar('b', 100)); executor.execute(new PrintNum(100)); // Shut down the executor executor.shutdown(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 30

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

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

Διαβάστε περισσότερα

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

Διάλεξη Εισαγωγή στη Java, Μέρος Γ Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού για Δίκτυα και Τηλεπικοινωνίες Χειμερινό Εξάμηνο 2017-2018 Διάλεξη Εισαγωγή στη Java, Μέρος Γ Νήματα (Threads) στην Java Συγχρονισμός Producer-Consumer

Διαβάστε περισσότερα

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

Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Multithreading Μulti-processing Πολλές διεργασίες ταυτόχρονα Κάθε διεργασία έχει το δικό της χώρο μνήμης ή ενδέχεται όλες να μοιράζονται και κάποιο

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 3: JAVA: ΕΞΑΙΡΕΣΕΙΣ, ΕΙΣΟΔΟΣ-ΕΞΟΔΟΣ, ΝΗΜΑΤΑ Νήματα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΝΗΜΑΤΑ

Διαβάστε περισσότερα

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

Το παρακάτω πρόγραμμα ορίζει δυο κλάσεις την SimpleThread και την TwoThreadsTest: Εισαγωγή στη γλώσσα προγραμματισμού Java 41 6. Threads Πολλές γλώσσες προγαμματισμού όπως και η Java διαθέτουν εργαλεία για την υλοποίηση threads στα προγράμματά τους. Αυτές οι γλώσσες καλούνται multithreading

Διαβάστε περισσότερα

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

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων Εργαστήριο Java Lab09 Αντικείμενο: Πολυνηματικές εφαρμογές Η χρήση περισσότερων από μιας ροής εντολών μέσα σε ένα πρόγραμμα είναι γνωστή ως multithreading. H κάθε μια ροή εντολών μέσα στο πρόγραμμα ονομάζεται

Διαβάστε περισσότερα

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

Εισαγωγή στην Java. Module 9: Threads. Prepared by Chris Panayiotou for EPL /03/2004 Εισαγωγή στην Java Module 9: Threads 15/03/2004 Prepared by Chris Panayiotou for EPL 602 1 Εισαγωγή στα Threads Συχνά χρειάζεται, να υπάρχουν ανεξάρτητες διεργασίες σε ένα πρόγραµµα separate, independently-running

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 13: Ταυτόχρονος Προγραμματισμός Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ειδικά Θέματα Προγραμματισμού Ειδικά Θέματα Προγραμματισμού Ενότητα 6: Threads Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

Διεργασίες (Processes) Διεργασία (process) ή καθήκον (task) Διεργασίες (Processes) στοιχειώδης οντότητα/δραστηριότητα υπολογισμού (processing entity/activity) εκτέλεση ενός προγράμματος ένα (κύριο) νήμα (thread)/ρεύμα ελέγχου/εκτέλεσης

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 23: Εισαγωγή στην Δικτύωση (Networking) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διευθύνσεις και Θύρες - Sockets και ServerSockets Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής

Διαβάστε περισσότερα

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

Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Τεκμηρίωση κώδικα Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Τεκμηρίωση κώδικα Multithreading Μulti-processing Πολλές διεργασίες ταυτόχρονα Κάθε διεργασία έχει το δικό της χώρο μνήμης ή ενδέχεται όλες να μοιράζονται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Πολυνηµατικές εφαρµογές σε Java Πολυνηµατικές εφαρµογές σε Java Σταύρος Πολυβίου Τί είναι ένα νήµα (thread); Ας ορίσουµε πρώτα το τί είναι µία διεργασία (process): Ένα αυτοδύναµο περιβάλλον εκτέλεσης (selfcontained execution environment).

Διαβάστε περισσότερα

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

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads)

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

Διαβάστε περισσότερα

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

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

13. Νήματα. 13.1 Νήματα και χρήση νημάτων στη Java. 13.1.1. Τι είναι τα νήματα; 13.1.2. Τρία μέρη ενός νήματος 13. Νήματα Ολοκληρώνοντας αυτό το κεφάλαιο θα μπορείτε Να κατανοείτε την έννοια του νήματος (thread) Να δημιουργείτε διακριτά νήματα στη Java, που θα ελέγχουν τον κώδικα και τα δεδομένα που χρησιμοποιούνται

Διαβάστε περισσότερα

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Πρόγραμμα και εκτέλεση προγράμματος Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

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

08 Πολυνηματικός προγραμματισμός στο JVM 08 Πολυνηματικός προγραμματισμός στο JVM Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Πολυνηματικός multi threaded προγραμματισμός

Διαβάστε περισσότερα

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

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

Διαβάστε περισσότερα

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 5 «Αμοιβαίος Αποκλεισμός» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας 1 Αμοιβαίος Αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του

Διαβάστε περισσότερα

Εισαγωγή στα Λειτουργικά Συστήματα

Εισαγωγή στα Λειτουργικά Συστήματα Εισαγωγή στα Λειτουργικά Συστήματα Ενότητα 4: Διεργασίες ΙΙ Γεώργιος Φ. Φραγκούλης Τμήμα Ηλεκτρολόγων Μηχανικών Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

Διαβάστε περισσότερα

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

Κεφάλαιο 1. Νήματα (Threads). Time Sharing Κεφάλαιο 1. Νήματα (Threads). Time Sharing Η επεξεργαστική ισχύς είναι ένας πόρος περιορισμένος (ιδιαίτερα στις προηγούμενες δεκαετίες) ο οποίος θέλουμε να εξυπηρετεί ταυτόχρονα πολλές εργασίες. Στους

Διαβάστε περισσότερα

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage

Διαβάστε περισσότερα

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Εισαγωγή στη γλώσσα προγραμματισμού JAVA Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Το πρώτο φλιτζάνι Java Λίστα με τα απαραίτητα Το πρώτο μου πρόγραμμα(hello World) Συνεχίζοντας

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 3 ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι. Ελεγκτές συνθηκών ή περιπτώσεων:

Διαβάστε περισσότερα

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Εργαστήριο 14 Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Να γράψετε πρόγραμμα που να δημιουργεί 1 νήμα Έτσι στο πρόγραμμα σας θα υπάρχουν 2 νήματα (το ένα νήμα είναι το αρχικό νήμα που

Διαβάστε περισσότερα

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13 Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις

Διαβάστε περισσότερα

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

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 6: Αφαιρετικότητα, Βιβλιοθήκες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικότητα -Βιβλιοθήκες (packages) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός

Διαβάστε περισσότερα

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες

Διαβάστε περισσότερα

Ταυτοχρονισμός (concurrency)

Ταυτοχρονισμός (concurrency) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με java threads Γκόγκος Χρήστος

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το

Διαβάστε περισσότερα

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES) Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES) Εισαγωγή H κεντρική μονάδα επεξεργασίας (ΚΜΕ) και η κύρια μνήμη αποτελούν τα βασικά δομικά στοιχεία ενός υπολογιστικού συστήματος. Η πρώτη εκτελεί εντολές χειρισμού δεδομένων

Διαβάστε περισσότερα

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1 Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

Εισαγωγικά & Βασικές Έννοιες

Εισαγωγικά & Βασικές Έννοιες Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο

Διαβάστε περισσότερα

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

Διαβάστε περισσότερα

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1 Κληρονομικότητα Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Κληρονομικότητα 1 Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί

Διαβάστε περισσότερα

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1 HelloWorld Παύλος Εφραιμίδης Java Το πρόγραμμα HelloWorld 1 Το πρόγραμμα HelloWorld.java Σχόλια στη Java /** * The HelloWorld class */ class HelloWorld { public static void main(string[] args) { System.out.println("Hello

Διαβάστε περισσότερα

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο

Διαβάστε περισσότερα

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Επικοινωνία με περιφερειακά Αρτηρία εισόδου-εξόδου, διευθύνσεις, εγγραφές αναγνώσεις Διαδικασία εξόδου έλεγχος κατάστασης περιφερειακού περίμενε

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 9. Ταυτόχρονος προγραμματισμός και νήματα. 9.1 Εισαγωγή ΚΕΦΑΛΑΙΟ 9 Ταυτόχρονος προγραμματισμός και νήματα Σύνοψη Σε αυτό το κεφάλαιο πραγματευόμαστε τον ταυτόχρονο προγραμματισμό με τη χρήση νημάτων. Η έμφαση είναι στην κατανόηση βασικών λειτουργιών των νημάτων

Διαβάστε περισσότερα

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα 9 ο Εξάμηνο Η ανάγκη για συγχρονισμό

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Λειτουργικά Συστήματα Ενότητα 5 : Αμοιβαίος Αποκλεισμός Δημήτριος Λιαροκάπης 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Μηχανικών

Διαβάστε περισσότερα

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου 1 Διάλεξη 20: Αναδρομή (Recursion) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Η έννοια της αναδρομής - Μη-αναδρομικός / Αναδρομικός Ορισμός Συναρτήσεων - Παραδείγματα Ανάδρομης - Αφαίρεση

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

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

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα κληρονοµικότητα Παύλος Εφραιµίδης 1 ιεραρχίες κλάσεων Στην (και γενικότερα στον αντικειµενοστρεφή προγραµµατισµό) µπορεί από µία κλάση να δηµιουργηθεί µια νέα κλάση απόγονος που κληρονοµεί όλα τα χαρακτηριστικά

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

Wrapper Classes, Abstract Classes and Interfaces

Wrapper Classes, Abstract Classes and Interfaces Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

Διαβάστε περισσότερα

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

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,

Διαβάστε περισσότερα

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed

Διαβάστε περισσότερα

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

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

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1 Κρίσιμη Περιοχή Υπό Συνθήκη (onditional ritical Regions) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Πέρα από ελεγκτές Ο ελεγκτής είναι χρήσιμο εργαλείο συγχρονισμού παρέχει στον προγραμματιστή εγγυημένο

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της

Διαβάστε περισσότερα

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

Διαβάστε περισσότερα

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,

Διαβάστε περισσότερα

Γενικά (για τις γραπτές εξετάσεις)

Γενικά (για τις γραπτές εξετάσεις) Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #12 η : Επανάληψη Γαβαλάς Δαμιανός dgavalas@aegean.gr Γενικά (για τις γραπτές εξετάσεις) Δεν υπάρχει αυστηρά ορισμένη «ύλη εξετάσεων» (καθώς δεν έχετε

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java Είσοδος Χρησιμοποιούμε την κλάση Scanner της Java import java.util.scanner; Αρχικοποιείται με το ρεύμα εισόδου: Scanner in = new Scanner(System.in);

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Λειτουργικά Συστήματα Ενότητα 4α: Σημαφόροι, Πρόβλημα Συνδαιτυμόνων Φιλοσόφων, Αδιέξοδα Αθηνά Βακάλη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Βασικά της γλώσσας JAVA

Βασικά της γλώσσας JAVA 17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Κων. Κόκκινος Αντικειμενοστραφής Προγραμματισμός Η ιδέα του αντικειμενοστραφούς προγραμματισμού Αυτόνομες οντότητες Στιγμιότυπα οντοτήτων Παράδειγμα

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Βρείτε τα λάθη Στο πρόγραμμα στην επόμενη διαφάνεια υπάρχουν διάφορα λάθη Ποια είναι? public abstract

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7 Περιεχόμενα 1 Εισαγωγικές Έννοιες...12 1.1 Το Αντικείμενο στην καθημερινότητα...12 1.2 Το Αντικείμενο στον Προγραμματισμό...12 1.3 Επικοινωνία αντικειμένων...13 1.4 Κλάση (class) αντικειμένων...14 1.4.1

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

16. Multithreading (Java Applications)

16. Multithreading (Java Applications) 16. Multithreading (Java Applications) Χειμερινό Εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Εισαγωγή: Τι είναι ένα thread; Δημιουργία και εκτέλεση Threads

Διαβάστε περισσότερα

Εισαγωγικά & Βασικές Έννοιες

Εισαγωγικά & Βασικές Έννοιες Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο

Διαβάστε περισσότερα

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα