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

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

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

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

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

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

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

HY335 4ο Φροντιστήριο

{ πρωτόκολλο, τοπική-διεύθυνση, τοπική-διεργασία, απομακρυσμένη-διεύθυνση, απομακρυσμένη-διεργασία }

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

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

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

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

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

ικτύωσησε Java Κατανεµηµένα Συστήµατα 08-1

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

Εργαστήριο Java. Αντικείµενο: Δίκτυα. Χειρισµός URLs. Άσκηση 1. Lab11. Πακέτο java.net

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

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #11 η : Διαδικτυακές Εφαρμογές με τη Java

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

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

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

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

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

4 η ιάλεξη: Signals UDP Sockets

Εισαγωγή στον Κατανεμημένο Προγραμματισμό

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

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

Εργαστήριο Κατανεμημένων Συστημάτων

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

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Αρχεία και Ρεύματα. Αρχεία

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

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

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

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

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

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

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

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

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

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

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

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

Interprocess Communication

Κατανεμημένα Συστήματα. Javascript LCR example

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

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

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

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

Remote Method Invocation (RMI)

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

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

Ανάπτυξη δικτυακού παιχνιδιού με δυνατότητα συμμετοχής ακροατηρίου.

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

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

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

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

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

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

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

6. Εξαιρέσεις στη γλώσσα Java

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

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

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

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ. Παράδοση Ασκήσεων Κεφάλαιο 2 Ασκήσεις 3,6,8,9,15,22,24,26. Γεωργόπουλος Άλκης Α.Μ.: 39 Κοντογιώργης Αναστάσιος A.M.

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

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

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

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

ΥΛΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΤΗ ΒΙΒΛΙΟΘΗΚΗ JAVA.NET ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΥ ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΤΕΕ

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

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

Τεχνολογίες ιαδικτύου

Διαδικτυακές Εφαρμογές Ενότητα 4: Streams

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

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

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

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

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

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

ΚΕΦΑΛΑΙΟ 10. Δικτυακός προγραμματισμός Εισαγωγή

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

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

50 Ketseo,Theoni Sarif,Omar 104

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

Σύνοψη 5 ης ιάλεξης. Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων.

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

Εργαστήριο Δικτύων Υπολογιστών

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

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

Transcript:

Φροντιστήριο Α' Κατανεμημένα Συστήματα 2013-2014 Επιμέλεια: Μπούτσης Ιωάννης mpoutsis@aueb.gr

Outline Επικοινωνία μέσω Java Sockets(υποδοχές) Παραλληλοποιημένος κώδικας: Threads(νήματα) Παραδείγματα

Εισαγωγή Sockets Δικτυακή επικοινωνία χαμηλού επιπέδου Σε client-server εφαρμογές: Ο server παρέχει κάποια υπηρεσία Ο client χρησιμοποιεί αυτή την υπηρεσία (πχ. Εμφανιση δεδομένων ενός query σε ΒΔ) Ανάγκη για αξιόπιστη επικοινωνία: TCP TCP: παρέχει ένα αξιόπιστο, point-to-point επικοινωνιακό κανάλι το οποίο χρησιμοποιούν οι εφαρμογές client-server στο Internet για να επικοινωνήσουν.

Client-Server socket Ο Server δεσμεύει ένα socket με συγκεκριμένο IP / port. Περιμένει και ακούει σε αυτή τη θύρα για αιτήσεις σύνδεσης. Client-side: Ο client ξέρει την IP / port στην οποία ακούει ο server και προσπαθεί να συνδεθεί αυτόν. Ο Client πρέπει να ορίσει τον εαυτό του: δεσμεύει ένα local port το οποίο χρησιμοποιεί στη διάρκεια της σύνδεσης (συνήθως δίνετε από το σύστημα). Μόλις γίνει το accept, o server δεσμεύει ένα νέο socket στην ίδια local port. Χρειαζόμαστε νέο socket για να μπορεί να συνεχίσει να ακούει στο αρχικό socket για αιτήσεις σύνδεσης. Ο client και ο server μπορούν τώρα να επικοινωνήσουν γράφοντας και διαβάζοντας από τα sockets τους.

Επικοινωνία μέσω Sockets Unicast 1 to 1 Multicast Πχ. αποστολή αρχείου από ένα κόμβο σε έναν άλλο Σε well-known port για όλους τους κόμβους Χρησιμοποιούμε UDP socket Πχ. Για να βρούμε ένα bootstrap κόμβο

Sockets Χρήση του πακέτου java.net Βασική τάξη Socket Throws: public Socket(InetAddress address, int port) public Socket(String host, int port) UnknownHostException, IOException

ServerSocket (TCP) Tάξη ServerSocket Throws: public ServerSocket(int port) public ServerSocket(int port, int queue_length) public Socket accept() IOException

InetAddress Η τάξη των διευθύνσεων IP public static InetAddress getbyaddress(byte[] addr) throws UnknownHostException public static InetAddress getbyname(string host) throws UnknownHostException, SecurityException public InetAddress getlocalhost() throws UnknownHostException public String getlocaladdress() public String gethostname()

Client/Server Example (TCP) ServerSocket s = new ServerSocket(5008); Ο server παρακολουθεί το port 5008 Socket insock = s.accept(); Ο server μπλοκάρει Ακούει για συνδέσεις σε αυτό το port Περιμένει να φτάσει μια σύνδεση από τον client

Client/Server Example (TCP) Πώς επικοινωνούν οι απομακρυσμένες διεργασίες? Μέσω streams InputStream instr = insock.getinputstream(); Για να διαβάζουμε ότι στέλνεται από την άλλη πλευρά της σύνδεσης OutputStream outstr = insock.getoutputstream(); Για να στείλουμε στην άλλη πλευρά της σύνδεσης

Streams Bytes: public InputStream getinputstream() public OutputStream getoutputstream() Primary data types: Object: DataInputStream / DataOutputStream ObjectInputStream / ObjectOutputStream Send Serializable objects

void openserver() { ServerSocket providersocket = null; Socket connection = null; String message = null; providersocket = new ServerSocket(4321); while (true) { // Wait for connection connection = providersocket.accept(); Server // get Input and Output streams ObjectOutputStream out = new ObjectOutputStream(connection.getOutputStream()); ObjectInputStream in = new ObjectInputStream(connection.getInputStream()); out.writeobject("connection successful!"); out.flush(); // The two parts communicate via the input and output streams do { message = (String) in.readobject(); System.out.println(connection.getInetAddress().getHostAddress() + ">" + message); catch (ClassNotFoundException classnot) { System.err.println("Data received in unknown format"); while (!message.equals("bye")); in.close(); out.close(); connection.close(); catch (IOException ioexception) { ioexception.printstacktrace(); finally { // Closing connection providersocket.close(); catch (IOException ioexception) { ioexception.printstacktrace();

Client void startclient() { Socket requestsocket = null; ObjectOutputStream out = null; ObjectInputStream in = null; String message; // 1. creating a socket to connect to the server requestsocket = new Socket(InetAddress.getByName("127.0.0.1"), 4321); // 2. get Input and Output streams out = new ObjectOutputStream(requestSocket.getOutputStream()); in = new ObjectInputStream(requestSocket.getInputStream()); // 3: Communicating with the server message = (String) in.readobject(); System.out.println("Server>" + message); out.writeobject("hi!"); out.flush(); out.writeobject("just Testing.."); out.flush(); out.writeobject("bye"); out.flush(); catch (ClassNotFoundException classnot) { System.err.println("data received in unknown format"); catch (UnknownHostException unknownhost) { System.err.println("You are trying to connect to an unknown host!"); catch (IOException ioexception) { ioexception.printstacktrace(); finally { // 4: Closing connection in.close(); out.close(); requestsocket.close(); catch (IOException ioexception) { ioexception.printstacktrace();

Μόνο ένας client? Το πρόβλημα με το προηγούμενο παράδειγμα: Εξυπηρετεί ένα client κάθε φορά βάζοντας στην ουρά τους υπόλοιπους (μέχρι 50) Χρειαζόμαστε παράλληλη επεξεργασία των clients Τι κάνουμε τότε? Θέτουμε maximum μέγεθος στην ουρά ServerSocket(8500, 100) Και εξυπηρετούμε κάθε αίτηση με ένα νέο Thread (αργότερα...)

DatagramSocket(UDP) Αποστολή πακέτων χωρίς σύνδεση Καμία εγγύηση στην παραλαβή ή στη σειρά Throws: public DatagramPacket(byte[] buf, int length) DatagramPacket(byte[] buf, int length, InetAddress address, int port) public DatagramSocket(int port) SocketException

Server public void openserver() { DatagramSocket socket = null; socket = new DatagramSocket(4445); while (true) { byte[] buf = new byte[256]; // receive request DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); // figure out response String dstring = new Date().toString(); buf = dstring.getbytes(); // send the response to the client at "address" and "port" InetAddress address = packet.getaddress(); int port = packet.getport(); packet = new DatagramPacket(buf, buf.length, address, port); socket.send(packet); catch (IOException e) { e.printstacktrace(); catch (SocketException e) { socket.close(); e.printstacktrace();

Client public void startclient() { String hostname = "localhost"; // get a datagram socket DatagramSocket socket = null; socket = new DatagramSocket(); // send request byte[] buf = new byte[256]; InetAddress address = InetAddress.getByName(hostname); DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445); socket.send(packet); // get response packet = new DatagramPacket(buf, buf.length); socket.receive(packet); // display response String received = new String(packet.getData(), 0, packet.getlength()); System.out.println("Date/Time: " + received); catch (SocketException e) { e.printstacktrace(); catch (UnknownHostException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); finally { socket.close();

Διανομή Δεδομένων στο δίκτυο Unicast: Multicast Broadcast Ένας στέλνει, ένας συγκεκριμένος λαμβάνει Ένας στέλνει, Πολλοί λαμβάνουν (ομάδα από παραλήπτες) Ένας στέλνει, όλοι λαμβάνουν Επίσης anycast, geocast κτλ.

MulticastSocket MulticastSocket(int port) public void joingroup(inetaddress mcastaddr) public void leavegroup(inetaddress mcastaddr) Throws: IOException

Multicast Sniffer MulticastSocket ms = null; InetAddress ia = null; byte[] buffer = new byte[65535]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); // 224.0.0.0 to 239.255.255.255 String address = "225.5.5.10"; int port = 5000; ia = InetAddress.getByName(address); catch (UnknownHostException e) { System.err.println(e); ms = new MulticastSocket(port); ms.joingroup(ia); while (true) { ms.receive(dp); String s = new String(dp.getData(), 0, dp.getlength()); System.out.println(s); catch (SocketException se) { System.err.println(se); catch (IOException ie) { System.err.println(ie); finally { ms.close();

Multicast Sender InetAddress ia = null; // 224.0.0.0 to 239.255.255.255 String address = "225.5.5.10"; int port = 5000; ia = InetAddress.getByName(address); catch (UnknownHostException e) { System.err.println(e); MulticastSocket ms = new MulticastSocket(); String temp = "Hi There"; byte[] data = temp.getbytes(); DatagramPacket datagrampacket = new DatagramPacket(data, data.length, ia, port); ms.send(datagrampacket); System.out.println("Sent!"); catch (SocketException se) { System.err.println(se); catch (IOException ie) { System.err.println(ie);

Java Threads Γνωστά και ως: lightweight process (LWP) Αποτελούνται από: stack, register program counter, thread id Μοιράζεται με άλλα threads στην διεργασία: code section, data open files, signals Three thread states: running, ready, blocked set, section, ίδια

Γιατί χρειαζόμαστε threads? Παράλληλη επεξεργασία πχ. web server: Threads για παράλληλη αποστολή αρχείων σε κάθε client Threads στη μεριά του server για να εξυπηρετεί πολλούς clients Γρήγορη επικοινωνία μέσω shared memory Χρήση όλως των διαθέσιμων επεξεργαστών Επίδοση λιγότερος χρόνος για create / destroy για thread σε σχέση με process

Challenges Συγχρονισμός μεταξύ των threads που μοιράζονται τους ίδιους πόρους Η ταυτόχρονη εκτέλεση μπορεί να δημιουργήσει δυσκολίες

Race condition And Concurrent access Ταυτόχρονη προσπέλαση κρίσιμων περιοχών από πλέον του ενός thread. Δε θέλουμε δυο ή και περισσότερα νήματα να ανανεώνουν μια κοινή δομή δεδομένων ή μεταβλητή ή αντικείμενο κ.τ.λ. Οι synchronized methods μπορούν να καλεστούν ταυτόχρονα από πολλά threads Μόνο ένα thread θα προσπελάσει τη μέθοδο κάθε φορά public synchronized void mymethod(){ someintvar++;

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

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

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

Java Threads boolean isalive () Επιστρέφει true αν το νήμα εκτελείται void setpriority (int προτεραιότητα) / int getpriority () Θέτει/επιστρέφει την προτεραιότητα του νήματος void join (long διάστημα) Περιμένει τον τερματισμό του νήματος για διάστημα msec Αν το διάστημα είναι 0, αναμονή για πάντα void join (): Ισοδύναμη με join(0) void checkaccess () Εξετάζει αν έχουμε πρόσβαση στο νήμα Εξαίρεση αν δεν έχουμε, επιστροφή αν έχουμε Χρήσιμη για εκσφαλμάτωση εφαρμογών

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

Thread Example public class mythread extends Thread { String input; public mythread(string input) { this.input = input; public void run() { for (int i = 0; i < 10; i++) { System.err.println(i + ":\t" + input); sleep((int) (Math.random() * 500)); catch (InterruptedException e) { public static void main(string[] args) { Thread t = new mythread("distributed"); t.start(); Thread t2 = new mythread("systems"); t2.start(); /* PROSOXH OXI: t = new mythread("distributed"); t.run(); t2 = new mythread("systems"); t2.run();*/

Runnable public class mythreadrunnable implements Runnable { String input; public mythreadrunnable(string input) { this.input = input; public void run() { for (int i = 0; i < 10; i++) { System.err.println(i + ":\t" + input); Thread.sleep((int) (Math.random() * 500)); catch (InterruptedException e) { public static void main(string[] args) { mythreadrunnable t = new mythreadrunnable("distributed"); new Thread(t).start(); mythreadrunnable t2 = new mythreadrunnable("systems"); new Thread(t2).start(); OUTPUT: 0: Distributed 0: Systems 1: Distributed 1: Systems 2: Distributed 3: Distributed 2: Systems 4: Distributed 3: Systems 4: Systems...

Server with Threads public class Provider { ServerSocket providersocket; Socket connection = null; ObjectOutputStream out; ObjectInputStream in; String message; Provider() { void openserver() { // creating a server socket providersocket = new ServerSocket(4321, 10); while (true) { // Wait for connection connection = providersocket.accept(); Thread t = new actionsforclients(connection); t.start(); catch (IOException ioexception) { ioexception.printstacktrace(); finally { // Closing connection providersocket.close(); catch (IOException ioexception) { ioexception.printstacktrace(); public class actionsforclients extends Thread { ObjectInputStream in; ObjectOutputStream out; public actionsforclients(socket connection) { out = new ObjectOutputStream(connection.getOutputStream()); in = new ObjectInputStream(connection.getInputStream()); catch (IOException e) { e.printstacktrace(); public void run() { int a = in.readint(); int b = in.readint(); out.writeint(a + b); out.flush(); catch (IOException e) { e.printstacktrace(); finally { in.close(); out.close(); catch (IOException ioexception) { ioexception.printstacktrace();

Client using thread public class Client extends Thread { int a, b; Client(int a, int b) { this.a = a; this.b = b; public void run() { Socket requestsocket = null; ObjectOutputStream out = null; ObjectInputStream in = null; requestsocket = new Socket("127.0.0.1", 4321); out = new ObjectOutputStream(requestSocket.getOutputStream()); in = new ObjectInputStream(requestSocket.getInputStream()); out.writeint(a); out.flush(); out.writeint(b); out.flush(); System.out.println("Server>" + in.readint()); catch (UnknownHostException unknownhost) { System.err.println("You are trying to connect to an unknown host!"); catch (IOException ioexception) { ioexception.printstacktrace(); finally { in.close(); out.close(); requestsocket.close(); catch (IOException ioexception) { ioexception.printstacktrace(); public static void main(string args[]) { new Client(10, 5).start(); new Client(20, 5).start(); new Client(30, 5).start(); new Client(40, 5).start(); new Client(50, 5).start(); new Client(60, 5).start(); new Client(70, 5).start(); new Client(80, 5).start(); new Client(90, 5).start(); new Client(100, 5).start(); Server>85 Server>95 Server>65 Server>105 Server>15 Server>55 Server>35 Server>45 Server>25 Server>75

Ερωτήσεις???