ιάλεξη 5 Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer problem Γραφικάµε Java - JavaFX

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

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

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

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

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

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

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

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

Διάλεξη 4. Νήματα (Threads) στην Java Συγχρονισμός Εξωτερικές διεργασίες Collections & Generics Διαχείριση σφαλμάτων στην Java

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

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

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

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

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

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

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

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

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

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

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

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

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

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


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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Graphical User Interfaces (GUI) SWING

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

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

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

Περιγραφή και Έλεγχος ιεργασιών

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

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

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

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

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

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

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

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

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

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

11β Δομικά πρότυπα σχεδίασης

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

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

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

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

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

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

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

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

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

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

VK -14/10/2016 Σελίς 1

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

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

Ε-85: Ειδικά Θέµατα Λογισµικού

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

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

8.1 Top-Level Swing Containers και Swing Components

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Τελικό τεστ - απαντήσεις

Επιτεύγµατα των Λ.Σ.

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

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

Τι είναι η Spring. Η Spring είναι ένα ελεύθερο (open source) περιβάλλον εργασίας για εφαρμογές Java. Μπορεί να περιγραφεί ως:

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

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

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

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

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

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

Transcript:

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer problem Γραφικάµε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 1

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer Problem Γραφικάµε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 2

Εισαγωγή στα νήµατα Σε υπολογιστικά περιβάλλοντα εφαρµογές «ανταγωνίζονται» να αποκτήσουν την δυνατότητα πρόσβασης και εκτέλεσης στην CPU (concurrent programming). υο ειδών οντότητες εκτέλεσης συναντούµε συνήθως, τις διεργασίες (processes) και τα νήµατα (threads). ιεργασίες Νήµατα Οι διεργασίες αποτελούν αυτόνοµες εφαρµογές που διαθέτουν δικό τους memory space. Το εκάστοτε λειτουργικό σύστηµα υποστηρίζει την ύπαρξη πόρων για την επικοινωνία µεταξύ διεργασιών (Inter Process Communication-ΙPC resources) στον ίδιο ή και σε διαφορετικούς υπολογιστές (πχ pipes, sockets ). Μπορούν να χαρακτηριστούν και ως lightweight processes. Παρέχουν και αυτά ένα χώρο εκτέλεσης µόνο που η δηµιουργία ενός thread απαιτεί λιγότερους πόρους να δεσµευτούν από το λειτουργικό σύστηµα. Τα νήµατα γεννώνται µέσα σε µια διεργασία. Συγκεκριµένα, µια διεργασία µπορεί να δηµιουργήσει ένα ή περισσότερα νήµατα ώστε να εκτελέσει πολλά tasks «ταυτόχρονα». Τα νήµατα µοιράζονται πόρους της διεργασίας που τα δηµιουργεί όπως µνήµη, αρχεία κλπ αλλά διαθέτουν και το δικό τους address space. Η αλλαγή στην προσπέλαση της CPU µεταξύ threads είναι λιγότερο χρονοβόρα (context switching) σε σχέση µε τις διεργασίες. Τµήµα Πληροφορικής και Τηλεπικοινωνιών 3

Τα νήµατα στην Java (1/2) H Java µας παρέχει δυο τρόπους για την δηµιουργία νηµάτων Με το να κάνουµε extend την κλάση Thread (java.lang.thread) Με το να κάνουµε implement το Runnable interface (java.lang.runnable) Extends Thread Μια κλάση µπορεί να κάνει extend την Thread και να κάνει override την µέθοδο run() µε σκοπό να ορίσει τα βήµατα εκτέλεσης ενός thread. (Να σηµειώσουµε πως η Thread κάνει implement το Runnable Interface) O constructor της κλάσης αυτής µπορεί να καλέσει τον constructor της Thread ρητά µε χρήση της super(). Η κλάση µας κληρονοµεί την µέθοδο start() που ορίζεται στην κλάση Thread και µε την κλήση της από ένα αντικείµενο µπορεί να ξεκινήσει την εκτέλεση του ένα νέο thread. Τµήµα Πληροφορικής και Τηλεπικοινωνιών 4

Τα νήµατα στην Java (2/2) Implements Runnable Μια κλάση µπορεί να κάνει implement το interface Runnable αρκεί να γραφτεί κώδικας για την µέθοδο run() που θα οριζει τον κύκλο ζωής ενός thread. Ακολούθως, ένα αντικείµενο τύπου Thread δηµιουργείται και του περνάµε σαν όρισµα στον constructor του ένα αντικείµενο από την κλάση που δηµιουργήσαµε και κάνει implement το Runnable. Η µέθοδος start() του αντικειµένου τύπου Thread καλείται και επιστρέφει µόλις γεννηθεί το thread Τµήµα Πληροφορικής και Τηλεπικοινωνιών Συνίσταται η χρήση threads που κάνουν implement το Runnable interface αντί να κληρωνοµούν την Thread Class: 1.Αν κάνoυµε extend την Thread, τότε δεν µπορούµε να κάνουµε extend καµία άλλη κλάση 2.To Runnable interface µας υπαγορεύει να κάνουµε implement µόνο µια µέθοδο (την run) και 5 αποφεύγουµε να κληρονοµήσουµε extra overhead της Thread.

Κύκλος ζωής ενός thread Start: είναι η κατάσταση στην οποία δηµιουργούµε ένα αντικείµενο τύπου Thread και λίγο πριν καλέσουµε την start() Runnable (Ready-to-run): Είναι η στιγµή που καλείται η start() και από εδώ ξεκινά η ζωή ενός thread. Σε αυτή την κατάσταση περιµένει πρόσβαση στην CPU. Ακόµη, σε αυτή την κατάσταση µπορούµε να µεταπέσουµε από τις non-runnable και running Running: Σε αυτή την κατάσταση το thread εκτελείται. Ο scheduler το επιλέγει µέσα από την runnable pool. Dead: Το thread σε αυτή την κατάσταση παύει να εκτελεί και γίνεται join από την διεργασία που το δηµιούργησε. Non-runnable state: Kλήση της static: void sleep(long millisecond) throws InterruptedException Περιµένει notification από άλλο thread: final void wait() throws InterruptedException To thread περιµένει για I/O πόρους Περιµένει τον τερµατισµό ενός άλλου thread για να τερµατίσει (joint completion) Περιµένει µέχρι να κάνει lock κάποιο πόρο. Τµήµα Πληροφορικής και Τηλεπικοινωνιών 6

Static µέθοδος που τυπώνει το όνοµα του thread που την κάλεσε και το µήνυµα που δέχεται ως παράµετρο Σε περίπτωση που το thread λάβει interrupt από κάποιο άλλο thread Η run ορίζει τον κύκλο ζωής του thread To αντικείµενο t τύπου Thread µας παρέχει µεθόδους για να χειριστούµε το thread που γεννήσαµε H main εκτός από διεργασία αποτελεί και thread και µπορεί να καλέσει την threadmessage Τµήµα Πληροφορικής και Τηλεπικοινωνιών 7

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer Problem Γραφικάµε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 8

Συγχρονισµός Ζητήµατα ασυνέπειας δεδοµένων προκύπτουν όταν ένα σύνολο από threads διαµοιράζονται κοινή µνήµη και η πρόσβαση σε αυτή δεν γίνεται συγχρονισµένα. start() thread1 thread2 Shared object Η Java µας παρέχει την µεθοδολογία για να πετύχουµε συγχρονισµό στην πρόσβαση ενός κοινού πόρου. Μεγάλη προσοχή πρέπει να δίνουµε όχι µόνο στο να σχεδιάσουµε σωστά την ελεγχόµενη πρόσβαση, αλλά και την αποφυγή καταστάσεων όπως deadlocks και starvation. Τµήµα Πληροφορικής και Τηλεπικοινωνιών 9

Συγχρονισµός και µέθοδοι Ορίζουµε ως synchronized τις µεθόδους της κλάσης. Κάθε φορά ένα νήµα θα έχει πρόσβαση σε οποιαδήποτε synchronized µέθοδο ενός δεδοµένου αντικειµένου, µπλοκάροντας οποιαδήποτε άλλη κλήση τόσο στην ίδια όσο και στις υπόλοιπες synchronized µεθόδους. Η λειτουργία του synchronized βασίζεται στην ύπαρξη ενός intrinsic lock που διαθέτει το αντικείµενο Ορίζουµε σαν διαµοιραζόµενο πόρο το αντικείµενο t ηµιουργούµε δυο νήµατα που ζητούν πρόσβαση στο αντικείµενο µέσα από τις µεθόδους του. Το πρόβληµα που µπορεί να προκύψει από αυτή τη σχεδίαση είναι να προκληθούν φαινόµενα starvation, µιας και απαγορεύουµε την πρόσβαση στον διαµοιραζόµενο πόρο για όλη τη διάρκεια της κλήσης µιας synchronized µεθοδου. 10 Το νήµα 2 είναι σε κατάσταση BLOCKED Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Συγχρονισµός και block εντολών Στην περίπτωση των synchronized statements πρέπει να δηλώσουµε ως προς ποιό αντικείµενο πάµε να κάνουµε lock. Fine-grained συγχρονισµός. Επικεντρωνόµαστε στον διαµοιραζόµενο πόρο και δεν µπλοκάρουµε την λειτουργία για όλη τη διάρκεια εκτέλεσης της µεθοδου Τµήµα Πληροφορικής και Τηλεπικοινωνιών 11

Συγχρονισµός µε χρήση αντικειµένων Ορισµός αντικειµένων µε αποκλειστική χρήση για τον συγχρονισµό διαφορετικών πόρων Η πρόσβαση στον ένα πόρο δεν αποκλείει την ταυτόχρονη προσπέλαση του άλλου Τµήµα Πληροφορικής και Τηλεπικοινωνιών Τηλεπικοινωνίων 2012-2013 12

Ατοµική Εκτέλεση (Atomic execution) Ατοµική πράξη εκτέλεσης (Atomic action) ορίζουµε την πράξη που εκτελείται επιτυχώς και µε τη µια. εν µπορεί να σταµατήσει στη µέση. Είτε εκτελείται ολόκληρη είτε καθόλου. Ακόµα και απλές πράξεις µπορεί να µην είναι ατοµικές λόγω του ότι αποσυντίθενται σε επιµέρους (χωρίς να καταλαβαίνει ο χρήστης). Παράδειγµα: double d; d++; Retrieve the current value of d. Increment the retrieved value by 1. Store the incremented value back in d. Παρόλα αυτά οι παρακάτω πράξεις είναι ατοµικές: Για primitive variables (εκτος long, double) και references, οι πράξεις read/write ειναι ατοµικές. Για όλες τις µεταβλητές που ορίζονται ως volatile (πτητικές) (εδώ συµπεριλαµβάνονται οι long, double). Οι αλλαγές που κάνουµε σε volatile variables είναι αµέσως οράτες σε άλλα νήµατα. Ορίζοντας κάτι volatile δεν σηµαίνει ότι εξασφαλίζουµε συγχρονισµό!!! Τµήµα Πληροφορικής και Τηλεπικοινωνιών 13

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer Problem Γραφικάµε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 14

Singleton Pattern H Java παρέχει ένα σύνολο από µεθόδους για την αποδοτική σχεδίαση κώδικα (Design Patterns). Η πιο δηµοφιλής από αυτές είναι και η Singleton Pattern και αφορά στην δηµιουργία µοναδικών αντικειµένων µιας κλάσης. To µοναδικό αντικείµενο της κλάσης Private constructor. Κανείς δεν µπορεί να φτιάξει αντικείµενο για αυτήν την κλάση! Μόνο στην πρώτη κλήση θα δηµιουργηθεί αντικείµενο τύπου Singleton. Με το synchronized αποφεύγουµε να υπάρξουν 2 threads για την αρχικοποίηση Κάνουµε override την clone() και πετάµε exception στην περίπτωση που πάµε να δηµιουργήσουµε µε κλώνο δεύτερο αντικείµενο Τµήµα Πληροφορικής και Τηλεπικοινωνίων 15

Ερωτήσεις Μπορεί µια κλάση που υλοποιεί Singleton Design Pattern να κληρονοµηθεί; Όχι καθώς ο constructor της ορίζεται ως private Πότε δηµιουργείται το αντικείµενο της κλάσης; Την πρώτη φορά που θα κληθεί η getinstance() Μπορείτε να σκεφτείται περιπτώσεις χρήσης της Singleton Design Pattern; Όταν θέλω να αρχικοποιήσω παραµέτρους για την εφαρµογή µου µόνο µια φορά. Όταν θέλω να έχω ένα πόρο που να τον µοιράζονται όλα τα threads της εφαρµογής µου Έχετε συναντήσει παράδειγµα singleton κλάσης στο Java API; java.lang.runtime Τµήµα Πληροφορικής και Τηλεπικοινωνίων 16

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer Problem Γραφικά µε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 17

Producer-Consumer problem Προβλήµατα συγχρονισµού όπως το producer-consumer πρόβληµα, απαιτούν πέρα από συγχρονισµένη προσπέλαση σε έναν κοινό πόρο, πρόβλεψη και αποφυγή φαινοµένων όπως το polling. Χαρακτηριστικό παράδειγµα είναι η περίπτωση όπου δυο threads διαµοιράζονται έναν κοινό πόρο (πχ ένα buffer). Ο ρόλος του ενός thread είναι να εισάγει (γράφει) δεδοµένα (producer) και του άλλου να διαβάζει (consumer). Σε αυτή την περίπτωση δεν αρκεί µόνο ο συγχρονισµός αλλά απαιτείται και έλεγχος συνθηκών. Μια κακή προσέγγιση στη λύση αυτού του προβλήµατος υπαγορεύει σε κάθε έναν από τους δυο να κάνει busy waiting µέχρι να στείλει/λάβει κάποια ενηµέρωση (CPU waste, polling). Η λύση που δίνει η Java στο πρόβληµα αυτό είναι µέσα από τις final µεθόδους της κλάσης Object wait(), notify(), notifyall(). Τµήµα Πληροφορικής και Τηλεπικοινωνίων 18

Ο producer αυξάνει συνεχώς το πεδίο n του q Κάθε φορά ένα thread θα καλεί µία από τις µεθόδους του q, µπλοκάρεται παράλληλα η κλήση της άλλης O consumer θέλει να βλέπει µοναχά τα updates!! ιαµοιραζόµενος πόρος Μια ενδεικτική εκτέλεση Put: 1 Got: 1 Got: 1 Got: 1 Got: 1 Got: 1 Put: 2 Put: 3 Put: 4 Put: 5 Put: 6 Put: 7 Got: 7

H wait() κάνει το τρέχον thread να ελευθερώσει το lock του αντικειµένου q και να κάνει sleep µέχρι κάποιο άλλο thread της στείλει notify() Η notify() ξυπνά το πρώτο thread που κάλεσε το wait() του αντικειµένου q. Εναλλακτική είναι η χρήση της notifyall() Μια ενδεικτική εκτέλεση Put: 1 Got: 1 Put: 2 Got: 2 Put: 3 Got: 3 Put: 4 Got: 4 Put: 5 Got: 5

Νήµατα (Threads) στην Java Συγχρονισµός Singleton Pattern Producer-Consumer Problem Γραφικά µε Java - JavaFX Τµήµα Πληροφορικής και Τηλεπικοινωνιών 21

Τι είναι η JavaFX Ένα πλαίσιο υποστήριξης µέσων/γραφικών για τη δηµιουργία GUI σε εφαρµογές Java. Βασίζεται στα παλαιά πλαίσια Swing και AWT Ισχυρότερο Desktop και web εφαρµογές Όπως το Swing, σχεδιάζει τα τµήµατα του, λιγότερη επικοινωνία µε OS Ελαφρύ κα υποστηριζόµενο από hardware Χρησιµοποιεί FXML νέα γλώσσα mark-up για καθορισµό UI

Ιστορικό Ανακοινώθηκε το Μάιο 2007 από τη Sun Microsystems Βγήκε το εκέµβριο 2008 Αρχικά ως απάντηση στα Flash και Shockwave Αλλά και για τη διευκόλυνση δηµιουργίας GUIs για Java εφαρµογές Τελευταία έκδοση JavaFX 8. Eνσωµατώθηκε στην κεντρική διανοµή Java

Ιστορικό Με την τελευταία έκδοση προστέθηκαν: Υποστήριξη Linux και MacOS Multi-touch events και gestures ιαχείριση εικόνων µε ενσωµατωµένο API Μεγάλος αριθµός νέων και βελτιωµένω UI controls, γραφικών και containers και άλλα...

Πριν

Μετά

JavaFX ή Swing/AWT ηµιουργία GUI γρηγορότερα σε σχέση µε Swing/AWT Οµορφότερα UIs Ενσωµάτωση ήχων, εικόνων, βίντεο και περιεχοµένου web Απλούστερος κώδικας ιαχωρισµός UI από λογική εφαρµογής Η JavaFX µπορεί να ενωµατωθεί σε εφαρµογές Swing, για οµαλότερη µετάβαση

Κλάσεις JavaFX

Hello World package helloworld; import javafx.application.application; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.scene.scene; import javafx.scene.control.button; import javafx.scene.layout.stackpane; import javafx.stage.stage; public class HelloWorld extends Application { public static void main(string[] args) { launch(args); } @Override public void start(stage primarystage) { primarystage.settitle("hello World!"); Button btn = new Button(); btn.settext("say 'Hello World'"); btn.setonaction(new EventHandler<ActionEvent>() { }); @Override public void handle(actionevent event) { System.out.println("Hello World!"); } } } StackPane root = new StackPane(); root.getchildren().add(btn); primarystage.setscene(new Scene(root, 300, 250)); primarystage.show();

Φόρµες @Override public void start(stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("fxml_exam ple.fxml")); } FXMLExample.java Scene scene = new Scene(root, 300, 275); stage.settitle("fxml Welcome"); stage.setscene(scene); stage.show(); fxml_example.fxml... <GridPane fx:controller="fxmlexample.fxmlexamplecontroller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding><insets top="25" right="25" bottom="10" left="25"/></padding> </GridPane> <Text text="welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="user Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordfield" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1" GridPane.rowIndex="4"> <Button text="sign In" onaction="#handlesubmitbuttonaction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/>

Φόρµες package fxmlexample; import javafx.event.actionevent; import javafx.fxml.fxml; import javafx.scene.text.text; public class FXMLExampleController { @FXML private Text actiontarget; } FXMLExampleController.java @FXML protected void handlesubmitbuttonaction(actionevent event) { actiontarget.settext("sign in button pressed"); }

JavaFX µε CSS Login.css root { display: block; }.root { -fx-background-image: url("background.jpg"); }.label { -fx-font-size: 12px; -fx-font-weight: bold; -fx-text-fill: #333333; -fx-effect: dropshadow( gaussian, rgba(255,255,255,0.5), 0,0,0,1 ); } #welcome-text { -fx-font-size: 32px; -fx-font-family: "Arial Black"; -fx-fill: #818181; -fx-effect: innershadow( three-pass-box, rgba(0,0,0,0.7), 6, 0.0, 0, 2 ); } #actiontarget { -fx-fill: FIREBRICK; -fx-font-weight: bold; -fx-effect: dropshadow( gaussian, rgba(255,255,255,0.5), 0,0,0,1 ); }... <stylesheets> <URL value="@login.css" /> </stylesheets> </GridPane> fxml_example.fxml <GridPane fx:controller="fxmlexample.fxmlexamplecontroller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10" styleclass="root"> <Text id="welcome-text" text="welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/>.button { -fx-text-fill: white; -fx-font-family: "Arial Narrow"; -fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box, rgba(0,0,0,0.6), 5, 0.0, 0, 1 ); }

Πληροφορίες, υλικό http://docs.oracle.com/javafx/2/get_ started/jfxpub-get_started.htm http://docs.oracle.com/javafx/2/over view/jfxpub-overview.htm https://www.jetbrains.com/help/idea/ 2016.2/javafx.html