16. Multithreading (Java Applications)

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

Download "16. Multithreading (Java Applications)"

Transcript

1 16. Multithreading (Java Applications) Χειμερινό Εξάμηνο 2012 Πέτρος Κωμοδρόμος 1

2 Θέματα Εισαγωγή: Τι είναι ένα thread; Δημιουργία και εκτέλεση Threads Καταστάσεις (States) ενός Thread: Ο κύκλος ζωής ενός Thread Προτεραιότητες (Priorities) Χρονοπρογραμματισμός (Scheduling) των Threads Συγχρονισμός (Synchronization) Threads Multithreading με GUI Thread Pools Άλλες χρήσιμες τάξεις και Interfaces του java.util.concurrent Monitors και Monitor Locks 2

3 Εισαγωγή Ένα thread (διεργασία/νήμα) έχει, όπως και ένα πρόγραμμα, μία αρχή από όπου ξεκινά, μια σειρά εντολών που εκτελεί, και ένα τέλος αφού ολοκληρώσει το σκοπό (task) του. Ένα thread όμως δεν είναι το ίδιο πρόγραμμα, αλλά τρέχει στα πλαίσια ενός προγράμματος. Με το multithreading (πολυνημάτωση) παρέχονται σε μία εφαρμογή πολλαπλά threads of execution επιτρέποντας την παράλληλη εκτέλεση κάποιων ξεχωριστών διεργασιών, σαν τμήματα, με διαφορετικούς σκοπούς το καθένα, μιας μεγαλύτερης διεργασίας (προγράμματος). 3

4 Single-threading: Μια διενέργεια κάποιας εφαρμογής με single-thread τρόπο εκτελέσεως πρέπει να ολοκληρωθεί προτού ξεκινήσουν άλλες διενέργειες. Υπάρχει μία συγκεκριμένη ροή εκτέλεσης με διαδοχική εκτέλεση εντολών και σε κάθε χρονική στιγμή υπάρχει ένα μοναδικό σημείο μέχρι το οποίο έχουν εκτελεστεί οι εντολές και το οποίο είναι το επόμενο που θα εκτελεστεί. Multi-threading: Αντιθέτως, εφαρμογές με multithreading επιτρέπουν σε πολλαπλές διενέργειες ή εργασίες να εκτελούνται ταυτοχρόνως, είτε κατανέμοντας τις υπολογιστικές απαιτήσεις σε συστήματα με πολλαπλούς επεξεργαστές, αν είναι διαθέσιμοι, είτε προσομοιώνοντας ταυτόχρονη εκτέλεση (concurrency) πολλαπλών ενεργειών σε συστήματα με ένα μόνο επεξεργαστή, βασιζόμενες στους πόρους που έχουν δοθεί στο πρόγραμμα (process). 4

5 Ένα thread αν και έχει τη δική του αρχή, ροή ελέγχου (flow of control) και τέλος, όμως δεν είναι πρόγραμμα και συνεπώς δεν μπορεί να τρέξει από μόνο του. Τρέχει στα πλαίσια ενός προγράμματος χρησιμοποιώντας τους πόρους που παρέχονται στο πρόγραμμα. Η Java έχει ενσωματωμένες δυνατότητες για multithreading σαν μέρος της γλώσσας εξασφαλίζοντας portability σε διαφορετικά συστήματα Σε κάποιες περιπτώσεις απαιτείται από τον προγραμματιστή τα επιμέρους threads (διεργασίες/νήματα) να είναι σωστά synchronized για να δουλεύουν ορθά 5

6 APIs σχετικά μεthreads java.util.timer: Για την εκτέλεση μετά από κάποια συγκεκριμένη καθυστέρηση ή επαναληπτικά ενός συγκεκριμένου πολύ απλού σκοπού (task), ο οποίος δίνεται μέσα στη μέθοδο run(), σε ένα thread παρασκηνίου (background thread) (- Using the Timer and TimerTask Classes -) javax.swing.timer: Για προγράμματα με γραφικό περιβάλλον διασύνδεσης (GUI), java.lang.thread: Περιέχει βασικές πληροφορίες για πιο ολοκληρωμένη υποστήριξη multithreading και threads με το thread API και τη γενική συμπεριφορά των threads, όπως το ξεκίνημα (starting), την νάρκωση (sleeping), την εκτέλεση (running), την παραχώρηση (yielding), και την προτεραιότητα του κάθε thread 6

7 Παράδειγμα επαναληπτικής χρήσης της τάξης Timer import java.util.timer; import java.util.timertask; import java.awt.toolkit; ThreadsEx1.java public class ThreadsEx1 Timer timer; Toolkit toolkit; int repetition, totalrepetitions; int delay; public ThreadsEx1(int delay, int interval, int reps) timer = new Timer(); repetition = 0; this.delay = delay; totalrepetitions = reps; toolkit = Toolkit.getDefaultToolkit(); timer.schedule(new MyTimerSubClass(), 1000*delay, 1000*interval); 7

8 class MyTimerSubClass extends TimerTask public void run() repetition++; System.out.printf("\n Repetition %d", repetition); System.out.printf(" after %d miliseconds = \n", delay*1000); toolkit.beep(); if(repetition==totalrepetitions) timer.cancel(); public static void main(string args[]) new ThreadsEx1(1,2,5); // (delay, interval, repetitions) System.out.println("\n A ThreadsEx1 object was created: "); 8

9 9

10 Χρήσης της Timer σε συγκεκριμένη χρονική στιγμή import java.util.timer; import java.util.timertask; import java.util.calendar; import java.util.date; import java.awt.toolkit; import javax.swing.joptionpane; ThreadsEx2.java public class ThreadsEx2 Timer timer; public ThreadsEx2(Calendar calendar) Date time = calendar.gettime(); timer = new Timer(); timer.schedule(new MyTimerSubClass(), time); 10

11 class MyTimerSubClass extends TimerTask public void run() JOptionPane.showMessageDialog(null, "Alert", "Reminder!!!!!", JOptionPane.ERROR_MESSAGE); timer.cancel(); public static void main(string args[]) Calendar calendar = Calendar.getInstance(); calendar.add(calendar.second, 30); new ThreadsEx2(calendar); System.out.println("\n A ThreadsEx2 object was created: "); 11

12 12

13 Δημιουργία Threads Παρέχοντας τη μέθοδο run(): 1. Επεκτείνοντας την τάξη (class) Thread o Επαναορίζοντας τη μέθοδο run(), η οποία ορίζει τις εντολές που πρέπει να εκτελεστούν για να επιτελέσει το thread το σκοπό (task) του 2. Υλοποιώντας τη διασύνδεση (interface) Runnable o Ορίζοντας τη μέθοδο run(), η οποία ορίζει τις εντολές που πρέπει να εκτελεστούν για να επιτελέσει το thread το σκοπό (task) του 13

14 Επέκταση της τάξης Thread class MyThreadClass extends Thread ThreadExample1.java MyThreadClass(String name) super(name); public void run() for(int i=0; i<5;i++) System.out.println("Thread: " + getname()); try Thread.sleep((int) (Math.random()*1000)); 14

15 catch(interruptedexception e) System.out.println("Catch: " + getname()); class ThreadExample1 public static void main(string args[]) MyThreadClass th1 = new MyThreadClass("Thread-1"); MyThreadClass th2 = new MyThreadClass("Thread-2"); MyThreadClass th3 = new MyThreadClass("Thread-3"); th3.start(); th1.start(); th2.start(); 15

16 16

17 Υλοποίηση της Runnable διασύνδεσης class MyRunnableClass implements Runnable public void run() ThreadExample2.java for(int i=0; i<5;i++) System.out.println("Thread: " + Thread.currentThread().getName()); try Thread.sleep((int) (Math.random()*1000)); catch(interruptedexception e) System.out.println("InterruptedException in " + Thread.currentThread().getName() + " thread."); 17

18 class ThreadExample2 public static void main(string args[]) MyRunnableClass r1 = new MyRunnableClass(); MyRunnableClass r2 = new MyRunnableClass(); MyRunnableClass r3 = new MyRunnableClass(); Thread th1 = new Thread(r1,"Thread-1"); Thread th2 = new Thread(r2,"Thread-2"); Thread th3 = new Thread(r3,"Thread-3"); th3.start(); th1.start(); th2.start(); System.out.println("Main: Current Thread: " + Thread.currentThread().getName()); 18

19 19

20 Διαχείριση των Threads Αφού δημιουργήσουμε ένα thread με ένα από τους δύο τρόπους πρέπει να μπορούμε να το ξεκινήσουμε και να το σταματήσουμε, σε σχέση και με τα άλλα threads, να συγχρονίσουμε (synchronize) τη χρήση κοινών πόρων, ώστε να μην προκληθεί κάποια ζημιά (resource corruption), αλλά και συντονίσουμε τη δυνατότητα του κάθε thread να τρέξει για να εκτελέσει το σκοπό του, παρέχοντας του χρονομερίδιο του επεξεργαστή (processor) ώστε να μην αποκλείεται. 20

21 Καταστάσεις (States) ενός Thread : Ο κύκλος ζωής ενός Thread New state Ένα νέο thread ξεκινά τη ζωή του σε ένα νέο (new) state χωρίς όμως ακόμη να του έχουν παρασχεθεί οποιοιδήποτε πόροι από το σύστημα Παραμένει σε αυτή την κατάσταση (state) μέχρι το πρόγραμμα να ξεκινήσει, χρησιμοποιώντας τη μέθοδο start(), το thread, βάζοντας το σε runnable κατάσταση (state) Runnable state Ένα thread φτάνει σε αυτή την κατάσταση (state) όταν κληθεί η start() μέθοδος του, ώστε να του έχουν παρασχεθούν οι απαραίτητοι πόροι από το σύστημα για να εκτελέσει τον σκοπό (task) του και να ενημερωθεί ο thread scheduler. Ο thread scheduler στη συνέχεια καλεί τη μέθοδο run(), η οποία περιέχει τις εντολές που απαιτούνται για να εκτελέσει το thread το σκοπό (task) του. o Όμως εφόσον συνήθως είναι μόνο ένας επεξεργαστής διαθέσιμος ένα thread μπορεί να περιμένει τη σειρά του για να τρέξει πραγματικά τις εντολές όπως καθορίζονται στη μέθοδο run() 21

22 Not Runnable state Ένα thread μπαίνει σε αυτή την κατάσταση είτε όταν καλείται η μέθοδος sleep() ή η μέθοδος wait() Waiting state o o Ένα thread μεταφέρεται σε αυτή την κατάσταση (state) για να αναμένει ένα άλλο thread να εκτελέσει τον σκοπό (task) του Ένα thread σε αυτή την κατάσταση επιστρέφει στην runnable κατάσταση όταν ειδοποιηθεί από το άλλο thread ότι έχει εκτελέσει τον σκοπό του Timed waiting state o o Ένα thread εισέρχεται σε αυτό το state για να περιμένει για ένα άλλο thread ή για κάποιο συνολικό χρόνο να περάσει Ένα thread σε αυτή την κατάσταση επιστρέφει στην runnable κατάσταση όταν ειδοποιηθεί από κάποιο άλλο thread ή όταν ο χρόνος αναμονής παρέλθει 22

23 Terminated state Ένα thread εισέρχεται σε αυτή την κατάσταση όταν ολοκληρώσει το σκοπό (task) του Ένα thread δεν πρέπει να χρησιμοποιεί τη μέθοδο stop() για να σταματήσει, αλλά πρέπει, αφού ολοκληρώσει το σκοπό (task) του, να τελειώσει κανονικά τη μέθοδο run() και να βγει από αυτή αφήνοντας το thread να τερματίσει φυσικά τη ζωή και εκτέλεση του Μην χρησιμοποιείτε ποτέ τις μεθόδους stop(), suspend() και resume() 23

24 Διάγραμμα κυρίων καταστάσεων (States) ενός Thread 24

25 Μέθοδος getstate() της τάξης Thread Η μέθοδος getstate() επιστρέφει ένα αντικείμενο Thread.State, το οποίο περιγράφει σε ποια κατάσταση (state) βρίσκεται το thread: NEW o Όταν ένα thread δεν έχει ακόμη ξεκινήσει RUNNABLE o Όταν ένα thread έχει ξεκινήσει να εκτελείται BLOCKED o WAITING o Όταν ένα thread είναι μπλοκαρισμένο περιμένοντας για ένα monitor lock Όταν ένα thread περιμένει επ αόριστο για ένα άλλο thread να εκτελέσει κάποια συγκεκριμένη ενέργεια TIMED_WAITING o Όταν ένα thread περιμένει ένα άλλο thread να εκτελέσει κάποια συγκεκριμένη ενέργεια μέχρι όμως κάποιο καθορισμένο χρονικό όριο TERMINATED o Όταν ένα thread έχει τελειώσει, ολοκληρώνοντας ότι είχε να κάνει 25

26 Thread life-cycle UML state diagram. 26

27 Runnable κατάσταση σύμφωνα με το λειτουργικό σύστημα ready state Ένα thread σε αυτή την κατάσταση (state) είναι έτοιμο να τρέξει χωρίς να περιμένει κάτι άλλο εκτός από το λειτουργικό σύστημα (operating system) να του παραχωρήσει ένα επεξεργαστή (processor) running state Ένα thread σε αυτή την κατάσταση (state) έχει ένα επεξεργαστή (processor) και εκτελείται, συνήθως, για ένα σύντομο διάστημα του χρόνου του επεξεργαστή το ονομαζόμενο χρονομερίδιο (time slice) ή κβάντο (quantum) προτού επιστρέψει στην κατάσταση ready 27

28 Προτεραιότητες (Priorities) των Threads Το κάθε thread στη Java έχει μία συγκεκριμένη προτεραιότητα Οι προτεραιότητες των threads στη Java κυμαίνονται μεταξύ MIN_PRIORITY (σταθερά, 1) και MAX_PRIORITY (σταθερά, 10) Threads με μεγαλύτερη προτεραιότητα θεωρούνται πιο σημαντικά και τους παρέχεται επεξεργαστής πριν από άλλα threads με χαμηλότερη προτεραιότητα Η προεπιλεγμένη προτεραιότητα ενός thread είναι η NORM_PRIORITY (σταθερά 5) ή η προτεραιότητα που έχει το thread που το δημιούργησε Χρησιμοποιώντας τη μέθοδο setpriority() μπορεί να τροποποιηθεί η προτεραιότητα ενός thread 28

29 Χρονοπρογραμματισμός - Thread Scheduling Καθορίζει ποιο thread θα τρέξει στη συνέχεια. Αν το σύστημα υποστηρίζει χρονομερίδια (time-slices) threads με την ίδια προτεραιότητα εξυπηρετούνται (τους δίνετε πρόσβαση στο CPU για να εκτελεστούν) εκ περιτροπής (round-robin fashion) Ένα thread που τρέχει μπορούν να προεκτοπιστεί (preempted) από άλλα threads που έχουν ψηλότερη προτεραιότητα ή από το σύστημα αν υποστηρίζει χρονομερίδια για να δώσει τη δυνατότητα σε κάποιο thread με την ίδια προτεραιότητα να τρέξει Σε κάποιες περιπτώσεις, threads με ψηλότερη προτεραιότητα μπορεί να αναβάλλουν επ αόριστο την εκτέλεση threads με χαμηλότερη προτεραιότητα, το οποίο είναι γνωστό σαν starvation (λιμός) 29

30 Ο χρονοπρογραμματισμός εξαρτάται από το λειτουργικό σύστημα και τον Η/Υ και συνεπώς πάντα πρέπει να ελέγχονται όλα τα συστήματα στα οποία μπορεί να εκτελεστεί το applet ή application μας. Συστήματα που δεν υποστηρίζουν χωρισμό του διαθέσιμου χρόνου του CPU σε χρονομερίδια (time-slicing) επιλέγουν ένα thread και το εκτελούν αφήνοντας το να τρέχει μέχρι να τελειώσει ή να προεκτοπιστεί από κάποιο άλλο thread με ψηλότερη προτεραιότητα. Ένα πρόγραμμα δεν πρέπει να βασίζεται στη δυνατότητα του συστήματος να χρησιμοποιεί χρονομερίδια (time-slicing) Τα threads σε ένα πρόγραμμα πρέπει εθελοντικά να δίνουν τη δυνατότητα σε άλλα threads να τρέξουν. Μπορεί να χρησιμοποιηθεί η μέθοδος yield() για να δοθεί η δυνατότητα σε άλλα runnable threads με την ίδια προτεραιότητα να τρέξουν. 30

31 Παράδειγμα χρονοπρογραμματισμού (Thread Scheduling) βάσει προτεραιοτήτων των threads 31

32 1 ον Παράδειγμα με προτεραιότητες ThreadExample3.java class MyRunnableClass implements Runnable public void run() for(int i=0; i<5;i++) System.out.println("Thread: " + Thread.currentThread().getName()); 32

33 class ThreadExample3 public static void main(string args[]) MyRunnableClass r1 = new MyRunnableClass(); MyRunnableClass r2 = new MyRunnableClass(); MyRunnableClass r3 = new MyRunnableClass(); Thread th1 = new Thread(r1,"Thread-1"); Thread th2 = new Thread(r2,"Thread-2"); Thread th3 = new Thread(r3,"Thread-3"); th2.setpriority(thread.max_priority); th1.setpriority(thread.norm_priority); th3.setpriority(thread.min_priority); th3.start(); th1.start(); th2.start(); 33

34 Εκτέλεση σε Η/Υ με ένα processor (CPU) 34

35 2 ον Παράδειγμα με προτεραιότητες ThreadExample4.java class MyRunnableClass implements Runnable public void run() for(int i=0; i<10;i++) System.out.println("Thread: " + Thread.currentThread().getName()); 35

36 class ThreadExample4 public static void main(string args[]) MyRunnableClass r1 = new MyRunnableClass(); MyRunnableClass r2 = new MyRunnableClass(); MyRunnableClass r3 = new MyRunnableClass(); Thread th1 = new Thread(r1,"Thread-1"); Thread th2 = new Thread(r2,"Thread-2"); Thread th3 = new Thread(r3,"Thread-3"); th2.setpriority(thread.norm_priority); th1.setpriority(thread.norm_priority); th3.setpriority(thread.min_priority); th3.start(); th1.start(); th2.start(); 36

37 Εκτέλεση σε Η/Υ με ένα processor (CPU) 37

38 3 ον Παράδειγμα με προτεραιότητες ThreadExample5.java class MyRunnableClass implements Runnable public void run() for(int i=0; i<10;i++) System.out.println("Thread: " + Thread.currentThread().getName()); Thread.currentThread().yield()); 38

39 class ThreadExample5 public static void main(string args[]) MyRunnableClass r1 = new MyRunnableClass(); MyRunnableClass r2 = new MyRunnableClass(); MyRunnableClass r3 = new MyRunnableClass(); Thread th1 = new Thread(r1,"Thread-1"); Thread th2 = new Thread(r2,"Thread-2"); Thread th3 = new Thread(r3,"Thread-3"); th2.setpriority(thread.norm_priority); th1.setpriority(thread.norm_priority); th3.setpriority(thread.min_priority); th3.start(); th1.start(); th2.start(); 39

40 Εκτέλεση σε Η/Υ με ένα processor (CPU) 40

41 Java SE 5.0: Δημιουργία και εκτέλεση Threads με συνδυασμό διασυνδέσεων (interfaces) Runnable και Executor Runnable interface Ορισμός της μεθόδου run() Εκτελείται από ένα αντικείμενο που υλοποιεί το Executor interface Executor interface Μπορεί εναλλακτικά να χρησιμοποιηθεί αντί της δημιουργίας threads Ορίζει τη μέθοδο execute(runnable command) η οποία εκτελεί το Runnable που δίνεται σαν παράμετρος Δημιουργεί και διαχειρίζεται μία ομάδα threads γνωστή ως thread pool 41

42 Tάξεις και διασυνδέσεις στο J2SE Thread Pools ExecutorService interface Επεκτείνει τη διασύνδεση Executor ορίζοντας άλλες μεθόδους για τη διαχείριση της ζωής ενός Executor Μπορεί να δημιουργηθεί χρησιμοποιώντας στατικές (static) μεθόδους της τάξης Executors, όπως οι newfixedthreadpool() και newcachedthreadpool() Η μέθοδος shutdown() τερματίζει threads που ολοκληρώνουν τους στόχους τους Μια υλοποίηση του ExecutorService μπορεί να χρησιμοποιηθεί για τη διαχείριση thread pools Executors class Η μέθοδος newfixedthreadpool() δημιουργεί ένα pool αποτελούμενο από ένα σταθερό αριθμό threads το οποίο έχει αναφορά ένα ExecutorService Η μέθοδος newcachedthreadpool() δημιουργεί ένα pool το οποίο δημιουργεί με τη σειρά του νέα threads όποτε χρειάζονται με αναφορά ένα ExecutorService 42

43 Παράδειγμα με ExecutorService και Executors import java.util.concurrent.executors; import java.util.concurrent.executorservice; class MyRunnableClass implements Runnable public void run() ThreadExample6.java for(int i=0; i<10;i++) System.out.println("Thread: " + Thread.currentThread().getName()); Thread.currentThread().yield(); 43

44 class ThreadExample6 public static void main(string args[]) MyRunnableClass r1 = new MyRunnableClass(); MyRunnableClass r2 = new MyRunnableClass(); MyRunnableClass r3 = new MyRunnableClass(); ExecutorService executorservice = Executors.newFixedThreadPool(3); executorservice.execute(r1); executorservice.execute(r2); executorservice.execute(r3); executorservice.shutdown(); 44

45 Εκτέλεση σε Η/Υ με ένα processor (CPU) 45

46 1 // Fig. 23.4: PrintTask.java 2 // PrintTask class sleeps for a random time from 0 to 5 seconds 3 import java.util.random; 4 5 class PrintTask implements Runnable 6 7 private int sleeptime; // random sleep time for thread 8 private String threadname; // name of thread 9 private static Random generator = new Random(); // assign name to thread 12 public PrintTask( String name ) threadname = name; // set name of thread // pick random sleep time between 0 and 5 seconds 17 sleeptime = generator.nextint( 5000 ); 18 // end PrintTask constructor 19 Implement runnable to create separate thread 46

47 20 // method run is the code to be executed by new thread 21 public void run() 22 Declare run method to fulfill interface 23 try // put thread to sleep for sleeptime amount of time System.out.printf( "%s going to sleep for %d milliseconds.\n", 26 threadname, sleeptime ); Thread.sleep( sleeptime ); // put thread to sleep 29 // end try 30 // if thread interrupted while sleeping, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch // print thread name 37 System.out.printf( "%s done sleeping\n", threadname ); 38 // end method run 39 // end class PrintTask 47

48 1 // Fig. 23.5: RunnableTester.java 2 // Multiple threads printing at different intervals. 3 import java.util.concurrent.executors; 4 import java.util.concurrent.executorservice; 5 6 public class RunnableTester 7 8 public static void main( String[] args ) 9 10 // create and name each runnable 11 PrintTask task1 = new PrintTask( "thread1" ); 12 PrintTask task2 = new PrintTask( "thread2" ); 13 PrintTask task3 = new PrintTask( "thread3" ); System.out.println( "Starting threads" ); // create ExecutorService to manage threads 18 ExecutorService threadexecutor = Executors.newFixedThreadPool( 3 ); // start threads and place in runnable state 21 threadexecutor.execute( task1 ); // start task1 22 threadexecutor.execute( task2 ); // start task2 23 threadexecutor.execute( task3 ); // start task threadexecutor.shutdown(); // shutdown worker threads 26 Create three PrintTasks; each will run in a separate thread Create fixed thread pool to execute and manage threads Execute each task; this method will assign a thread to the runnable Shutdown thread pool when runnables complete their tasks 48

49 27 System.out.println( "Threads started, main ends\n" ); 28 // end main 29 // end class RunnableTester Starting threads Threads started, main ends thread1 going to sleep for 1217 milliseconds thread2 going to sleep for 3989 milliseconds thread3 going to sleep for 662 milliseconds thread3 done sleeping thread1 done sleeping thread2 done sleeping Starting threads thread1 going to sleep for 314 milliseconds thread2 going to sleep for 1990 milliseconds Threads started, main ends thread3 going to sleep for 3016 milliseconds thread1 done sleeping thread2 done sleeping thread3 done sleeping 49

50 Συγχρονισμός (Synchronization) των Threads Παρέχεται στον προγραμματιστή για την αποφυγή ταυτόχρονης τροποποίησης κάποιων δεδομένων από δύο ή περισσότερα threads με απροσδιόριστα αποτελέσματα Εξασφαλίζει αποκλειστική πρόσβαση σε ένα κοινό (shared) αντικείμενο, ώστε να μην μπορεί να αλλοιωθεί λανθασμένα (corrupted) Υλοποιείται στη Java χρησιμοποιώντας με συγχρονισμένο κώδικα και την monitor κλειδαριά που κληρονομείται από το Object ή από το J2SΕ 5.0 με κλειδαριές (locks) που ορίζονται άμεσα σε σχέση με κάποιες προϋποθέσεις 50

51 Παράδειγμα: Παραγωγού/Καταναλωτή (Producer/Consumer) χωρίς συγχρονισμό (synchronization) 1 // Fig. 23.6: Buffer.java 2 // Buffer interface specifies methods called by Producer and Consumer. 3 4 public interface Buffer 5 6 public void set( int value ); // place int value into Buffer 7 public int get(); // return int value from Buffer 8 // end interface Buffer 51

52 1 // Fig. 23.9: UnsynchronizedBuffer.java 2 // UnsynchronizedBuffer represents a single shared integer. 3 4 public class UnsynchronizedBuffer implements Buffer 5 6 private int buffer = -1; // shared by producer and consumer threads 7 8 // place value into buffer 9 public void set( int value ) System.out.printf( "Producer writes\t%2d", value ); 12 buffer = value; 13 // end method set // return value from buffer 16 public int get() System.out.printf( "Consumer reads\t%2d", buffer ); 19 return buffer; 20 // end method get 21 // end class UnsynchronizedBuffer Set the value of the buffer Read the value of the buffer Shared variable to store data 52

53 1 // Fig. 23.7: Producer.java 2 // Producer's run method stores the values 1 to 10 in buffer. 3 import java.util.random; 4 5 public class Producer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Producer( Buffer shared ) sharedlocation = shared; 14 // end Producer constructor // store values from 1 to 10 in sharedlocation 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 53

54 21 for ( int count = 1; count <= 10; count++ ) try // sleep 0 to 3 seconds, then place value in Buffer Thread.sleep( generator.nextint( 3000 ) ); // sleep thread 26 sharedlocation.set( count ); // set value in buffer 27 sum += count; // increment sum of values 28 System.out.printf( "\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s\n%s\n", "Producer done producing.", 38 "Terminating Producer." ); 39 // end method run 40 // end class Producer Sleep for up to 3 seconds 54

55 1 // Fig. 23.8: Consumer.java 2 // Consumer's run method loops ten times reading a value from buffer. 3 import java.util.random; 4 5 public class Consumer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Consumer( Buffer shared ) sharedlocation = shared; 14 // end Consumer constructor // read sharedlocation's value four times and sum the values 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 55

56 21 for ( int count = 1; count <= 10; count++ ) // sleep 0 to 3 seconds, read value from buffer and add to sum 24 try Thread.sleep( generator.nextint( 3000 ) ); 27 sum += sharedlocation.get(); 28 System.out.printf( "\t\t\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s %d.\n%s\n", 38 "Consumer read values totaling", sum, "Terminating Consumer." ); 39 // end method run 40 // end class Consumer Sleep for up to 3 seconds 56

57 1 // Fig 23.10: SharedBufferTest.java 2 // Application shows two threads manipulating an unsynchronized buffer. 3 import java.util.concurrent.executorservice; 4 import java.util.concurrent.executors; 5 6 public class SharedBufferTest 7 8 public static void main( String[] args ) 9 10 // create new thread pool with two threads 11 ExecutorService application = Executors.newFixedThreadPool( 2 ); // create UnsynchronizedBuffer to store ints 14 Buffer sharedlocation = new UnsynchronizedBuffer(); 15 Create shared UnsynchronizedBuffer for producer and consumer to use 57

58 16 System.out.println( "Action\t\tValue\tProduced\tConsumed" ); 17 System.out.println( "------\t\t-----\t \t \n" ); // try to start producer and consumer giving each of them access 20 // to sharedlocation 21 try application.execute( new Producer( sharedlocation ) ); 24 application.execute( new Consumer( sharedlocation ) ); 25 // end try 26 catch ( Exception exception ) exception.printstacktrace(); 29 // end catch application.shutdown(); // terminate application when threads end 32 // end main 33 // end class SharedBufferTest Pass shared buffer to both producer and consumer 58

59 Action Value Produced Consumed Producer writes 1 1 Producer writes 2 3 Producer writes 3 6 Consumer reads 3 3 Producer writes 4 10 Consumer reads 4 7 Producer writes 5 15 Producer writes 6 21 Producer writes 7 28 Consumer reads 7 14 Consumer reads 7 21 Producer writes 8 36 Consumer reads 8 29 Consumer reads 8 37 Producer writes 9 45 Producer writes Producer done producing. Terminating Producer. Consumer reads Consumer reads Consumer reads Consumer reads Consumer read values totaling 77. Terminating Consumer. 59

60 Action Value Produced Consumed Consumer reads -1-1 Producer writes 1 1 Consumer reads 1 0 Consumer reads 1 1 Consumer reads 1 2 Consumer reads 1 3 Consumer reads 1 4 Producer writes 2 3 Consumer reads 2 6 Producer writes 3 6 Consumer reads 3 9 Producer writes 4 10 Consumer reads 4 13 Producer writes 5 15 Producer writes 6 21 Consumer reads 6 19 Consumer read values totaling 19. Terminating Consumer. Producer writes 7 28 Producer writes 8 36 Producer writes 9 45 Producer writes Producer done producing. Terminating Producer. 60

61 Συγχρονισμός με Monitors και Monitor Locks Μια μέθοδος μπορεί να οριστεί σαν συγχρονισμένη (synchronized) απλά χρησιμοποιώντας το keyword synchronized στον ορισμό της μεθόδου, όπως πιο κάτω: public synchronized void mysyncfunction()... Επίσης, κάποιες εντολές (κομμάτι κώδικα) μπορεί να οριστούν σαν συγχρονισμένες (synchronized), όπως πιο κάτω, ώστε να μην μπορούν να εκτελεστούν ταυτοχρόνως με άλλο συγχρονισμένο κώδικα (μεθόδους ή εντολές) στο ίδιο αντικείμενο: synchronized ( <object>)... 61

62 Ορίζοντας συγχρονισμένη μια μέθοδο ή κάποιες εντολές σημαίνει ότι όταν ένα thread χρησιμοποιεί συγχρονισμένο κώδικα σε ένα αντικείμενο, το οποίο σημαίνει ότι έχει αποκτήσει την κλειδαριά του, δεν μπορεί ένα άλλο thread να πάρει τον έλεγχο και να χρησιμοποιήσει στο ίδιο αντικείμενο συγχρονισμένο κώδικα, αφού θεωρείται κλειδωμένο από τη στιγμή που το πρώτο thread κατέχει ήδη την κλειδαριά. Όλα τα άλλα threads που θέλουν να εκτελέσουν στο ίδιο αντικείμενο συγχρονισμένο κώδικα μπλοκάρονται και θα πρέπει να περιμένουν να τελειώσει το πρώτο thread και να ελευθερώσει τη κλειδαριά. Η χρήση συγχρονισμού έχει αρνητικές συνέπειες στην απόδοση ενός προγράμματος και θα πρέπει να χρησιμοποιείται μόνο σε κρίσιμα τμήματα του κώδικα για αποφυγή σφαλμάτων. 62

63 Συγχρονισμένες μέθοδοι (synchronized methods) περιμένουν μόνο για συγχρονισμένες μεθόδους στο ίδιο αντικείμενο. Συνεπώς, μια συγχρονισμένη μέθοδος (synchronized method) μπορεί να κληθεί σε άλλο αντικείμενο (instance) της ίδιας τάξης. Επίσης, μπορούν να κληθούν χωρίς κανένα περιορισμό μέθοδοι που δεν είναι συγχρονισμένες στο ίδιο αντικείμενο, ασχέτως με το εάν ενδεχομένως μια συγχρονισμένη μέθοδος (synchronized method) έχει κληθεί στο ίδιο αντικείμενο και εκτελείται από κάποιο άλλο thread. Αυτός ο τρόπος συγχρονισμού βασίζεται με μια ειδική κλειδαριά, τη monitor, που έχει το κάθε αντικείμενο την οποία κληρονομεί από τη τάξη Object. Όταν ένα thread προσπαθήσει να εκτελέσει μια συγχρονισμένη μέθοδο πρέπει να πάρει την κλειδαριά του συγκεκριμένου αντικειμένου για να μπορέσει να προχωρήσει. 63

64 Μέθοδοι wait(), notify(), notifyall(), της Object Κάθε αντικείμενο έχει ένα monitor το οποίο κληρονομεί από την Object Το monitor επιτρέπει μόνο ένα thread να εκτελεί συγχρονισμένο κώδικα (synchronized methods and statements) στο ίδιο αντικείμενο σε οποιαδήποτε χρονική στιγμή Ένα thread που περιμένει να αποκτήσει την κλειδαριά (monitor) ενός αντικειμένου, λόγω του ότι ήδη την κατέχει κάποιο άλλο thread, μπλοκάρεται (blocked state) Η μέθοδος wait() της τάξης Object θέτει ένα thread σε κατάσταση αναμονής (waiting state) Η μέθοδος notify() της τάξης Object ειδοποιεί ένα thread που αναμένει Η μέθοδος notifyall() της τάξης Object ειδοποιεί ή άλλως ξυπνά όλα τα threads που αναμένουν 64

65 Ένα thread μπορεί να καλέσει συγχρονισμένο κώδικα ενός αντικειμένου ενώ έχει ήδη το κλειδί του, δηλαδή μπορεί να επαναποκτήσει κλειδί το οποίο έχει. Έτσι μπορεί να εκτελέσει μια συγχρονισμένη μέθοδο που καλείται από μια άλλη συγχρονισμένη μέθοδο. Είναι λάθος ένα thread να καλέσει τις μεθόδους wait(), notify() και notifyall() σε ένα αντικείμενο χωρίς να κατέχει την κλειδαριά για αυτό. Τέτοια προσπάθεια προκαλεί ένα IllegalMonitorStateException. 65

66 Αδιέξοδο - Deadlock Συμβαίνει όταν ένα waiting thread (π.χ. το thread1) δεν μπορεί να προχωρήσει γιατί περιμένει είτε άμεσα ή έμμεσα ένα άλλο thread (π.χ. thread2), ενώ το thread2 δεν μπορεί να προχωρήσει γιατί περιμένει είτε άμεσα ή έμμεσα το thread1. Έχοντας δύο threads να περιμένουν το ένα το άλλο, οι συνθήκες που θα επέτρεπαν στο κάθε thread να εκτελεστεί ποτέ δεν θα συμβούν. Συνήθως συμβαίνει όταν δύο threads προσπαθούν ταυτόχρονα να τρέχουν συγχρονισμένο κώδικα στο ίδιο αντικείμενο μπλοκάροντας το ένα το άλλο. 66

67 Παράδειγμα: Παραγωγού/Καταναλωτή (Producer/Consumer) με συγχρονισμό (synchronization) 1 // Fig. 23.6: Buffer.java 2 // Buffer interface specifies methods called by Producer and Consumer. 3 4 public interface Buffer 5 6 public void set( int value ); // place int value into Buffer 7 public int get(); // return int value from Buffer 8 // end interface Buffer 67

68 1 // Fig : SynchronizedBuffer.java 2 // SynchronizedBuffer synchronizes access to a single shared integer. 3 4 public class SynchronizedBuffer implements Buffer 5 6 private int buffer = -1; // shared by producer and consumer threads 7 private boolean occupied = false; // count of occupied buffers 8 9 // place value into buffer 10 public synchronized void set( int value ) // while there are no empty locations, place thread in waiting state 13 while ( occupied ) // output thread information and buffer information, then wait 16 try System.out.println( "Producer tries to write." ); 19 displaystate( "Buffer full. Producer waits." ); 20 wait(); 21 // end try 22 catch ( InterruptedException exception ) exception.printstacktrace(); 25 // end catch 26 // end while buffer = value; // set new buffer value 29 Declare a synchronized set method Wait until buffer is empty Set buffer value 68

69 30 // indicate producer cannot store another value 31 // until consumer retrieves current buffer value 32 occupied = true; displaystate( "Producer writes " + buffer ); notify(); // tell waiting thread to enter runnable state 37 // end method set; releases lock on SynchronizedBuffer // return value from buffer 40 public synchronized int get() // while no data to read, place thread in waiting state 43 while (!occupied ) // output thread information and buffer information, then wait 46 try System.out.println( "Consumer tries to read." ); 49 displaystate( "Buffer empty. Consumer waits." ); 50 wait(); 51 // end try 52 catch ( InterruptedException exception ) exception.printstacktrace(); 55 // end catch 56 // end while Declare synchronized get method Buffer is now occupied Notify waiting thread that it may now read a value Wait until buffer is full 69

70 58 // indicate that producer can store another value 59 // because consumer just retrieved buffer value 60 occupied = false; int readvalue = buffer; // store value in buffer 63 displaystate( "Consumer reads " + readvalue ); notify(); // tell waiting thread to enter runnable state return readvalue; 68 // end method get; releases lock on SynchronizedBuffer // display current operation and buffer state 71 public void displaystate( String operation ) System.out.printf( "%-40s%d\t\t%b\n\n", operation, buffer, 74 occupied ); 75 // end method displaystate 76 // end class SynchronizedBuffer Buffer is now empty Notify thread it may now write to buffer 70

71 1 // Fig. 23.7: Producer.java 2 // Producer's run method stores the values 1 to 10 in buffer. 3 import java.util.random; 4 5 public class Producer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Producer( Buffer shared ) sharedlocation = shared; 14 // end Producer constructor // store values from 1 to 10 in sharedlocation 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 71

72 21 for ( int count = 1; count <= 10; count++ ) try // sleep 0 to 3 seconds, then place value in Buffer Thread.sleep( generator.nextint( 3000 ) ); // sleep thread 26 sharedlocation.set( count ); // set value in buffer 27 sum += count; // increment sum of values 28 System.out.printf( "\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s\n%s\n", "Producer done producing.", 38 "Terminating Producer." ); 39 // end method run 40 // end class Producer Sleep for up to 3 seconds 72

73 1 // Fig. 23.8: Consumer.java 2 // Consumer's run method loops ten times reading a value from buffer. 3 import java.util.random; 4 5 public class Consumer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Consumer( Buffer shared ) sharedlocation = shared; 14 // end Consumer constructor // read sharedlocation's value four times and sum the values 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 73

74 21 for ( int count = 1; count <= 10; count++ ) // sleep 0 to 3 seconds, read value from buffer and add to sum 24 try Thread.sleep( generator.nextint( 3000 ) ); 27 sum += sharedlocation.get(); 28 System.out.printf( "\t\t\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s %d.\n%s\n", 38 "Consumer read values totaling", sum, "Terminating Consumer." ); 39 // end method run 40 // end class Consumer Sleep for up to 3 seconds 74

75 1 // Fig 23.20: SharedBufferTest2.java 2 // Application shows two threads manipulating a synchronized buffer. 3 import java.util.concurrent.executorservice; 4 import java.util.concurrent.executors; 5 6 public class SharedBufferTest2 7 8 public static void main( String[] args ) 9 10 // create new thread pool with two threads 11 ExecutorService application = Executors.newFixedThreadPool( 2 ); // create SynchronizedBuffer to store ints 14 Buffer sharedlocation = new SynchronizedBuffer(); System.out.printf( "%-40s%s\t\t%s\n%-40s%s\n\n", "Operation", 17 "Buffer", "Occupied", " ", "------\t\t " ); try // try to start producer and consumer application.execute( new Producer( sharedlocation ) ); 22 application.execute( new Consumer( sharedlocation ) ); 23 // end try 24 catch ( Exception exception ) exception.printstacktrace(); 27 // end catch Create a SynchronizedBuffer for use in producer and consumer Execute the producer and consumer in separate threads 75

76 29 application.shutdown(); 30 // end main 31 // end class SharedBufferTest2 Operation Buffer Occupied Consumer tries to read. Buffer empty. Consumer waits. -1 false Producer writes 1 1 true Consumer reads 1 1 false Consumer tries to read. Buffer empty. Consumer waits. 1 false Producer writes 2 2 true Consumer reads 2 2 false Producer writes 3 3 true Consumer reads 3 3 false Consumer tries to read. Buffer empty. Consumer waits. 3 false Producer writes 4 4 true Consumer reads 4 4 false Consumer tries to read. Buffer empty. Consumer waits. 4 false Producer writes 5 5 true Consumer reads 5 5 false 76

77 Producer writes 6 6 true Consumer reads 6 6 false Consumer tries to read. Buffer empty. Consumer waits. 6 false Producer writes 7 7 true Consumer reads 7 7 false Consumer tries to read. Buffer empty. Consumer waits. 7 false Producer writes 8 8 true Consumer reads 8 8 false Producer writes 9 9 true Producer tries to write. Buffer full. Producer waits. 9 true Consumer reads 9 9 false Producer writes true Producer done producing. Terminating Producer. Consumer reads false Consumer read values totaling 55. Terminating Consumer. 77

78 J2SE5.0: Διασύνδεση (interface) Lock για συγχρονισμό Η μέθοδος lock() αποκτά την κλειδαριά (lock), επιβάλλοντας αμοιβαίο αποκλεισμό (mutual exclusion) Η μέθοδος unlock() ελευθερώνει την κλειδαριά (lock) Η τάξη ReentrantLock υλοποιεί τη διασύνδεση (interface) Lock Χρησιμοποιώντας μία κλειδαριά (Lock) με δίκαιο τρόπο διαχείρισης (fairness policy) βοηθά στην αποφυγή επ άπειρο αποκλεισμού, αλλά μπορεί να μειώσει σημαντικά το συνολικό επίπεδο απόδοσης (overall efficiency) ενός προγράμματος και έτσι πρέπει να χρησιμοποιούνται μόνο όταν είναι απαραίτητο. 78

79 Παρατηρήσεις για συγχρονισμό (Synchronization) Μεταβλητές προϋποθέσεων (Condition variables) Αν ένα thread κρατά μια κλειδαριά δεν μπορεί να συνεχίσει το στόχο του έως η προϋπόθεση ικανοποιηθεί, το thread μπορεί να περιμένει μία μεταβλητή προϋποθέσεων (Condition variables) Δημιουργείται καλώντας τη μέθοδο newcondition() της τάξης Lock Αντιπροσωπεύεται από ένα αντικείμενο το οποίο υλοποιεί τη διασύνδεση (interface) Condition Διασύνδεση (interface) Condition Ορίζει τις μεθόδους: o o o await(): για να αναγκάσει ένα thread να περιμένει signal(): για να "ξυπνήσει" (wake up) ένα thread που περιμένει signalall(): για να "ξυπνήσει" (wake up) όλα τα threads που περιμένουν 79

80 Αδιέξοδο - Deadlock Έχοντας δύο threads να περιμένουν το ένα το άλλο, οι συνθήκες που θα επέτρεπαν στο κάθε thread να εκτελεστεί ποτέ δεν θα συμβούν. Το κλείδωμα το οποίο συμβαίνει με την εκτέλεση της μεθόδου lock() μπορεί να οδηγήσει σε deadlock αν τα locks δεν ελευθερωθούν ποτέ. Κλήσεις στη μέθοδο unlock() πρέπει να τοποθετούνται σε finally blocks ώστε να είναι σίγουρο ότι τα locks θα ελευθερωθούν τελικά αποφεύγοντας προβλήματα με deadlocks. 80

81 Παρατηρήσεις Όταν πολλά threads τροποποιούν ένα κοινό αντικείμενο χρησιμοποιώντας locks, αν ένα thread καλέσει τη μέθοδο await() για να εισέλθει σε κατάσταση waiting για μία condition variable, πρέπει οπωσδήποτε ένα άλλο thread να καλέσει τη μέθοδο signal() του Condition για να μπορέσει το thread που περιμένει το condition variable να επιστρέψει σε runnable state. Αν πολλά threads περιμένουν ένα condition variable ένα άλλο thread μπορεί να καλέσει τη μέθοδο signalall() της τάξης Condition για να δώσει ευκαιρία σε όλα τα waiting threads να εκτελέσουν τους στόχους τους. Αν αυτό δεν συμβεί τότε μπορεί να συμβεί επ αόριστο αναβολή εκτέλεσης (indefinite postponement) ή αδιέξοδο (deadlock). Αν ένα thread καλέσει μία από τις μεθόδους await(), signal(), ή signalall() σε ένα condition variable χωρίς να έχει αποκτήσει το αντίστοιχο lock για εκείνο το condition variable προκαλείται ένα IllegalMonitorStateException. 81

82 Παράδειγμα: 2 ος Τρόπος υλοποίησης παραγωγού/καταναλωτή (Producer/Consumer) με συγχρονισμό (synchronization) 1 // Fig. 23.6: Buffer.java 2 // Buffer interface specifies methods called by Producer and Consumer. 3 4 public interface Buffer 5 6 public void set( int value ); // place int value into Buffer 7 public int get(); // return int value from Buffer 8 // end interface Buffer 82

83 1 // Fig : SynchronizedBuffer.java 2 // SynchronizedBuffer synchronizes access to a single shared integer. 3 import java.util.concurrent.locks.lock; 4 import java.util.concurrent.locks.reentrantlock; 5 import java.util.concurrent.locks.condition; 6 7 public class SynchronizedBuffer implements Buffer 8 9 // Lock to control synchronization with this buffer 10 private Lock accesslock = new ReentrantLock(); // conditions to control reading and writing 13 private Condition canwrite = accesslock.newcondition(); 14 private Condition canread = accesslock.newcondition(); private int buffer = -1; // shared by producer and consumer threads 17 private boolean occupied = false; // whether buffer is occupied // place int value into buffer 20 public void set( int value ) accesslock.lock(); // lock this object 23 Create ReentrantLock for mutual exclusion Create two Condition variables; one for writing and one for reading Buffer shared by producer and consumer Try to obtain the lock before setting the value of the shared data 83

84 24 // output thread information and buffer information, then wait 25 try // while buffer is not empty, place thread in waiting state 28 while ( occupied ) System.out.println( "Producer tries to write." ); 31 displaystate( "Buffer full. Producer waits." ); 32 canwrite.await(); // wait until buffer is empty 33 // end while buffer = value; // set new buffer value // indicate producer cannot store another value 38 // until consumer retrieves current buffer value 39 occupied = true; 40 Producer waits until buffer is empty 84

85 41 displaystate( "Producer writes " + buffer ); // signal thread waiting to read from buffer 44 canread.signal(); 45 // end try 46 catch ( InterruptedException exception ) exception.printstacktrace(); 49 // end catch 50 finally accesslock.unlock(); // unlock this object 53 // end finally 54 // end method set // return value from buffer 57 public int get() int readvalue = 0; // initialize value read from buffer 60 accesslock.lock(); // lock this object 61 Signal consumer that it may read a value Release lock on shared data Acquire lock before reading a value 85

86 62 // output thread information and buffer information, then wait 63 try // while no data to read, place thread in waiting state 66 while (!occupied ) System.out.println( "Consumer tries to read." ); 69 displaystate( "Buffer empty. Consumer waits." ); 70 canread.await(); // wait until buffer is full 71 // end while // indicate that producer can store another value 74 // because consumer just retrieved buffer value 75 occupied = false; readvalue = buffer; // retrieve value from buffer 78 displaystate( "Consumer reads " + readvalue ); 79 Consumer waits until buffer contains data to read 86

87 80 // signal thread waiting for buffer to be empty 81 canwrite.signal(); 82 // end try 83 // if waiting thread interrupted, print stack trace 84 catch ( InterruptedException exception ) exception.printstacktrace(); 87 // end catch 88 finally accesslock.unlock(); // unlock this object 91 // end finally return readvalue; 94 // end method get // display current operation and buffer state 97 public void displaystate( String operation ) System.out.printf( "%-40s%d\t\t%b\n\n", operation, buffer, 100 occupied ); 101 // end method displaystate 102 // end class SynchronizedBuffer Signal producer that it can write to buffer Release lock on shared data 87

88 1 // Fig. 23.7: Producer.java 2 // Producer's run method stores the values 1 to 10 in buffer. 3 import java.util.random; 4 5 public class Producer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Producer( Buffer shared ) sharedlocation = shared; 14 // end Producer constructor // store values from 1 to 10 in sharedlocation 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 88

89 21 for ( int count = 1; count <= 10; count++ ) try // sleep 0 to 3 seconds, then place value in Buffer Thread.sleep( generator.nextint( 3000 ) ); // sleep thread 26 sharedlocation.set( count ); // set value in buffer 27 sum += count; // increment sum of values 28 System.out.printf( "\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s\n%s\n", "Producer done producing.", 38 "Terminating Producer." ); 39 // end method run 40 // end class Producer Sleep for up to 3 seconds 89

90 1 // Fig. 23.8: Consumer.java 2 // Consumer's run method loops ten times reading a value from buffer. 3 import java.util.random; 4 5 public class Consumer implements Runnable 6 7 private static Random generator = new Random(); 8 private Buffer sharedlocation; // reference to shared object 9 10 // constructor 11 public Consumer( Buffer shared ) sharedlocation = shared; 14 // end Consumer constructor // read sharedlocation's value four times and sum the values 17 public void run() int sum = 0; 20 Implement the runnable interface so that producer will run in a separate thread Declare run method to satisfy interface 90

91 21 for ( int count = 1; count <= 10; count++ ) // sleep 0 to 3 seconds, read value from buffer and add to sum 24 try Thread.sleep( generator.nextint( 3000 ) ); 27 sum += sharedlocation.get(); 28 System.out.printf( "\t\t\t%2d\n", sum ); 29 // end try 30 // if sleeping thread interrupted, print stack trace 31 catch ( InterruptedException exception ) exception.printstacktrace(); 34 // end catch 35 // end for System.out.printf( "\n%s %d.\n%s\n", 38 "Consumer read values totaling", sum, "Terminating Consumer." ); 39 // end method run 40 // end class Consumer Sleep for up to 3 seconds 91

92 1 // Fig 23.12: SharedBufferTest2.java 2 // Application shows two threads manipulating a synchronized buffer. 3 import java.util.concurrent.executorservice; 4 import java.util.concurrent.executors; 5 6 public class SharedBufferTest2 7 8 public static void main( String[] args ) 9 10 // create new thread pool with two threads 11 ExecutorService application = Executors.newFixedThreadPool( 2 ); // create SynchronizedBuffer to store ints 14 Buffer sharedlocation = new SynchronizedBuffer(); 15 Create SynchronizedBuffer to be shared between producer and consumer 92

93 16 System.out.printf( "%-40s%s\t\t%s\n%-40s%s\n\n", "Operation", 17 "Buffer", "Occupied", " ", "------\t\t " ); try // try to start producer and consumer application.execute( new Producer( sharedlocation ) ); 22 application.execute( new Consumer( sharedlocation ) ); 23 // end try 24 catch ( Exception exception ) exception.printstacktrace(); 27 // end catch application.shutdown(); 30 // end main 31 // end class SharedBufferTest2 Execute the producer and consumer in separate threads 93

94 Operation Buffer Occupied Producer writes 1 1 true Producer tries to write. Buffer full. Producer waits. 1 true Consumer reads 1 1 false Producer writes 2 2 true Producer tries to write. Buffer full. Producer waits. 2 true Consumer reads 2 2 false Producer writes 3 3 true Consumer reads 3 3 false Producer writes 4 4 true Consumer reads 4 4 false Consumer tries to read. Buffer empty. Consumer waits. 4 false Producer writes 5 5 true Consumer reads 5 5 false Consumer tries to read. Buffer empty. ΠΠΜ Consumer 500: Προχωρημένη waits. Ανάπτυξη Λογισμικού Εφαρμογών 5 Μηχανικής false 94

95 Producer writes 6 6 true Consumer reads 6 6 false Producer writes 7 7 true Consumer reads 7 7 false Producer writes 8 8 true Consumer reads 8 8 false Producer writes 9 9 true Consumer reads 9 9 false Producer writes true Producer done producing. Terminating Producer. Consumer reads false Consumer read values totaling 55. Terminating Consumer. 95

96 Multithreading και GUI Τα GUI συστατικά του Swing δεν είναι thread safe Όλες οι τροποποιήσεις και αλλαγές ενός Swing GUI πρέπει να γίνονται μέσα από το event-dispatching thread o Αυτό επιτυγχάνεται εύκολα με τη στατική μέθοδο invokelater() της τάξης SwingUtilities στην οποία δίνεται σαν παράμετρος ένα Runnable αντικείμενο 96

97 Χρήσιμες Πληροφορίες Concurrent Programming in Java, Second Edition, Doug Lea, written for intermediate and advanced threads programmers. Java Threads, Third Edition, Scott Oaks and Henry Wong (O'Reilly, 2004) Java Concurrency in Practice, Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea (Addison Wesley, available early 2006) Sun s Java Tutorial: Threads 97

98 Παράδειγμα προσομοίωσης με γραφικά import javax.swing.*; import java.awt.event.*; import java.awt.*; PS5_2Threaded.java public class PS5_2Threaded public static void main(string args[]) javax.swing.swingutilities.invokelater(new Runnable() public void run() new ShapePanel("Drawing some shapes"); ); 98

99 class ShapePanel extends JFrame implements Runnable private JPanel buttonspanel; private JButton buttonstart, buttonstop, buttoncontinue; private JPanel shapepanel, colorpanel; private MyJPanel canvas; private JButton computebutton; private JRadioButton circleradiobutton; private JRadioButton rectangleradiobutton; private JRadioButton squareradiobutton; private JRadioButton triangleradiobutton; private ButtonGroup buttongroup; private int step; private final int STEPS= ; private Thread animatorthread ; private boolean frozen=true ; 99

100 ShapePanel(String s) super(s); // Start - Stop - Continue buttonspanel = new JPanel(); buttonspanel.setborder(borderfactory.createemptyborder(40, 20, 20, 30)); buttonspanel.setlayout(new GridLayout(1,3)); buttonstart = new JButton("Start", new ImageIcon("start.gif")); buttonstart.addactionlistener(new MyInnerStartEventHandler()); buttonstart.setmnemonic('s'); buttonspanel.add(buttonstart); buttonstop = new JButton("Stop", new ImageIcon("stop.gif")); buttonstop.addactionlistener(new MyInnerStopEventHandler()); buttonstop.setmnemonic('t'); buttonstop.setenabled(false); buttonspanel.add(buttonstop); buttoncontinue = new JButton("Continue", new ImageIcon("continue.gif")); buttoncontinue.addactionlistener(new MyInnerContinueEventHandler()); buttoncontinue.setenabled(false); buttoncontinue.setmnemonic('c'); buttonspanel.add(buttoncontinue); 100

101 add(buttonspanel,borderlayout.north); // Canvas canvas = new MyJPanel(); shapepanel = new JPanel(); colorpanel = new JPanel(); // Shape selection: Circle - Rectangle - Square - Triangle shapepanel.setlayout(new GridLayout(1,4)); circleradiobutton = new JRadioButton("Circle"); circleradiobutton.addactionlistener(new MyInnerCircleEventHandler()); rectangleradiobutton = new JRadioButton("Rectangle"); rectangleradiobutton.addactionlistener(new MyInnerRectangleEventHandler()); squareradiobutton = new JRadioButton("Square"); squareradiobutton.addactionlistener(new MyInnerSquareEventHandler()); triangleradiobutton = new JRadioButton("Triangle"); triangleradiobutton.addactionlistener(new MyInnerTriangleEventHandler()); buttongroup = new ButtonGroup(); buttongroup.add(circleradiobutton); buttongroup.add(rectangleradiobutton); buttongroup.add(squareradiobutton); buttongroup.add(triangleradiobutton); circleradiobutton.setselected(true); canvas.setshape("circle"); 101

102 shapepanel.add(circleradiobutton); shapepanel.add(rectangleradiobutton); shapepanel.add(squareradiobutton); shapepanel.add(triangleradiobutton); add(canvas, BorderLayout.CENTER); add(shapepanel, BorderLayout.SOUTH); add(colorpanel, BorderLayout.EAST); setbounds(100,50,450,600); setdefaultlookandfeeldecorated(true); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); private class MyInnerStartEventHandler implements ActionListener public void actionperformed(actionevent ae) System.out.println("Starting the simulation") ; buttonstart.setenabled(false); buttonstop.setenabled(true); startsimulation(); 102

103 private class MyInnerStopEventHandler implements ActionListener public void actionperformed(actionevent ae) System.out.println("Stoping the simulation") ; buttonstop.setenabled(false); buttoncontinue.setenabled(true); stopsimulation(); private class MyInnerContinueEventHandler implements ActionListener public void actionperformed(actionevent ae) System.out.println("Continuing the simulation") ; buttonstop.setenabled(true); buttoncontinue.setenabled(false); continuesimulation(); 103

104 private class MyInnerCircleEventHandler implements ActionListener public void actionperformed(actionevent ae) canvas.setshape("circle"); repaint(); private class MyInnerRectangleEventHandler implements ActionListener public void actionperformed(actionevent ae) canvas.setshape("rectangle"); repaint(); private class MyInnerSquareEventHandler implements ActionListener public void actionperformed(actionevent ae) canvas.setshape("square"); repaint(); 104

105 private class MyInnerTriangleEventHandler implements ActionListener public void actionperformed(actionevent ae) canvas.setshape("triangle"); repaint(); void startsimulation() frozen = false ; step = 0; start() ; public void stopsimulation() repaint() ; animatorthread=null ; frozen=true ; public void continuesimulation() frozen=false ; start() ; 105

106 public void start() if(!frozen) // Start animating the simulated system if(animatorthread==null) animatorthread=new Thread(this) ; animatorthread.start() ; public void run() int skipnumber=20; Thread.currentThread().setPriority(Thread.MIN_PRIORITY) ; while(thread.currentthread()==animatorthread && step<steps) timestep(); if(step%skipnumber==0) repaint() ; try Thread.sleep(10) ; catch(interruptedexception e) System.out.println("InterruptedException e: " + e); step++; 106

107 public void timestep() canvas.setdimension((double)step/steps*200); class MyJPanel extends JPanel private String selectedshape="circle"; private double dimension; MyJPanel() super(); void setdimension(double d) dimension = d; void setshape(string s) selectedshape = s; System.out.println(" selectedshape : " +selectedshape); 107

108 public void paintcomponent(graphics g) super.paintcomponent(g); setbackground(color.black); if(selectedshape.equals("circle")) g.setcolor(color.yellow); g.filloval(100,100,(int)(dimension),(int)(dimension)); else if(selectedshape.equals("square")) g.setcolor(color.green); g.fillrect(100,100,(int)(dimension),(int)(dimension)); else if(selectedshape.equals("rectangle")) g.setcolor(color.red); g.fillrect(50,100,(int)(1.75*dimension),(int)(0.75*dimension)); else if(selectedshape.equals("triangle")) int x[] = (int)(0.5*dimension), (int)(1.5*dimension), (int)(dimension) ; int y[] = (int)(1.5*dimension), (int)(1.5*dimension), (int)(0.5*dimension) ; g.setcolor(color.cyan); g.fillpolygon(x,y,3); 108

109 109

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 30/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Συλλογή απορριμμάτων Συλλογή απορριμμάτων (Garbage

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

8. Μέθοδοι (Methods)

8. Μέθοδοι (Methods) 8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και

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

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

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

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

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

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

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

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

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

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

Instruction Execution Times

Instruction Execution Times 1 C Execution Times InThisAppendix... Introduction DL330 Execution Times DL330P Execution Times DL340 Execution Times C-2 Execution Times Introduction Data Registers This appendix contains several tables

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

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 3/4/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Γιατί έλεγχος πρόσβασης? Προστασία ιδιωτικής πληροφορίας

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

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

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

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

14 Πρότυπα Σχεδίασης συνέχεια

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

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

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

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

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

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

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

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

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ. Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2018-19, Χειμερινό Εξάμηνο 1 η Ενδιάμεση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες: Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!! Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο Τελική Εξέταση

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί

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

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

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

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 23/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Υπερφόρτωση μεθόδων Υπερφόρτωση μεθόδων Πολλαπλές

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

(Διαφάνειες Νίκου Βιδάκη)

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

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

άσκηση Hide UI Elements 7.2 Try and Catch

άσκηση Hide UI Elements 7.2 Try and Catch 7.1 Hide UI Elements Στο Android Studio όταν θέλουμε να κρύψουμε οτιδήποτε (κάποιο Button, ένα TextView, ένα ImageView κλπ) μπορούμε να χρησιμοποιήσουμε την παρακάτω εντολή: setvisibility(view.invisible)

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!! Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 Ακαδημαϊκό Έτος 2018-19, Χειμερινό Εξάμηνο Τελική Εξέταση

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

Προσομοίωση BP με το Bizagi Modeler

Προσομοίωση BP με το Bizagi Modeler Προσομοίωση BP με το Bizagi Modeler Α. Τσαλγατίδου - Γ.-Δ. Κάπος Πρόγραμμα Μεταπτυχιακών Σπουδών Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών 2017-2018 BPMN Simulation with Bizagi Modeler: 4 Levels

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

11α Κατασκευαστικά πρότυπα σχεδίασης

11α Κατασκευαστικά πρότυπα σχεδίασης 11α Κατασκευαστικά πρότυπα σχεδίασης Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Κατασκευαστικά

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι 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

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

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

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

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

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

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

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

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

Δομές Δεδομένων - Εργαστήριο 2. Λίστες Λίστες Λίστες (Lists) : Συλλογή δεδομένων σε δυναμικά δεσμευμένους κόμβους. Κάθε κόμβος περιέχει συνδέσεις προς άλλους κόμβους. Προσπέλαση -στού κόμβου διατρέχοντας όλους τους προηγούμενους. Πολλές παραλλαγές

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού 5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού Χειμερινό εξάμηνο 2013 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Αντικειμενοστραφής προγραμματισμός Τάξεις (classes)

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

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

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

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

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

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

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

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

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

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

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

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

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

ιαδικτυακές Εφαρµογές

ιαδικτυακές Εφαρµογές ιαδικτυακές Εφαρµογές µε Java2 Στοιχεία ικτυακής Επικοινωνίας Όροι IP address 32bit αριθµός που χρησιµοποιείται από το Internet Protocol για την παράδοση δεδοµένων στο σωστό υπολογιστή στο δίκτυο. Port

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 15η: 31/08/2006 1 Εισαγωγή

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

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

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

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

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

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

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

7. Δομές Ελέγχου (Control Statements)

7. Δομές Ελέγχου (Control Statements) 7. Δομές Ελέγχου (Control Statements) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Αλγόριθμοι, δομές ελέγχου και ψευδοκώδικας Δομές ελέγχου στη

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

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

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

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

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Συγχρονισμός (συνέχεια) Μεταβλητές υπό συνθήκη Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Συγχρονισμός μεταξύ νημάτων

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II Strings Η κλάση String είναι προκαθορισμένη κλάση της Java που μας επιτρέπει να χειριζόμαστε αλφαριθμητικά. Ο τελεστής + μας επιτρέπει

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

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

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

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

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

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

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

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1 Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Μονονηματική / πολυνηματική εκτέλεση Μονονηματικό μοντέλο εκτέλεσης (συμβατικό) Οι εντολές του κώδικα εκτελούνται σειριακά Ένα μοναδικό νήμα εκτέλεσης (execution

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

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

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

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

Το πρόγραμμα 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 υποστηρίζει

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

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

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

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

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012 Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012 Θέμα 1 Θέμα 2 Θέμα 3 Θέμα 4 Θέμα

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

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

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

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

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

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

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

Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού

Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού Λειτουργικά Συστήματα Πραγματικού Χρόνου 2006-07 Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού Μ.Στεφανιδάκης Κοινοί πόροι Κοινοί (διαμοιραζόμενοι) πόροι με μία η περισσότερες μονάδες

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

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

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

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016 Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο 1 η Ενδιάμεση

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

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

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

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

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού Java 69

Εισαγωγή στη γλώσσα προγραμματισμού Java 69 Εισαγωγή στη γλώσσα προγραμματισμού Java 69 9. Animation σε Java 9.1 Γενικά περί Animation Ένας από τους καλύτερους τρόπους για να γίνει ένα πρόγραμμα σε Java ή μια σελίδα που τρέχει Java applet πιο ελκυστική,

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

(C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved. Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.

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

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

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

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

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

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

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Generic Types Τα Generics έχουν προστεθεί στη JAVA από το 2004 ως μέρος του J2SE 5.0 Με τη χρήση

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

Section 8.3 Trigonometric Equations

Section 8.3 Trigonometric Equations 99 Section 8. Trigonometric Equations Objective 1: Solve Equations Involving One Trigonometric Function. In this section and the next, we will exple how to solving equations involving trigonometric functions.

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Κεφάλαιο 6ο: Αδιέξοδα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Κεφάλαιο 6ο: Αδιέξοδα ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Κεφάλαιο 6ο: Αδιέξοδα 1 3.1 Εισαγωγή Αδιέξοδο = ένα σύνολο από διεργασίες που δημιουργούν μια κυκλική αλυσίδα όπου κάθε process στην αλυσίδα δεν μπορεί να προχωρήσει και περιμένει

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

Προγραμματισμός Ταυτόχρονος Προγραμματισμός

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

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

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες

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

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

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 4: Διεργασίες Πρόγραμμα Πρόγραμμα 1 Πρόγραμμα

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι 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 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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