Κυριακή, 6 Απριλίου 2008

Java Concurrency (Τι είναι;)

Java concurrency είναι το σύνολο των χαρακτηριστικών της Java, που δίνει την δυνατότητα στον προγραμματιστή να γράφει κομμάτια κώδικα που να τρέχουν παραλληλα. Έτσι ώστε να αξιοποιουνται περισσότερο οι πόροι του συστήματος. Δηλαδή είναι ολα αυτά που προσφέρει η Java και την κάνουν κατάλληλη γλώσσα για "παραλληλο προγραμματισμό" [Concurrent computing].
Ο παράλληλος προγραμματισμός επιτυγχάνεται αφενώς μέσω της δυνατότητας που δίνει η Java να ανοίγονται πολλαπλά Threads τα οποία εκτελούν κομμάτια κώδικα και αφεταίρου μέσω της δινατοτητας που δίνει να συγχρονιζονται περιοχές της μνήμης που μπορούν να ειναι κοινές για αυτά τα Threads. Οπότε αν ενα προγραμμα κάνει αναζήτηση σε πολλαπλά σημεια, τοτε θα μπορούσε να ανοίγει ένα Thread για κάθε περιοχή όπου αναζητάτε αλλά τα αποτελέσματα όλων των Thread να κρατόνται σε μια κοινή περιοχή στην μνήμη ώστε να συγκεντρώνονται εκει.
Τι είναι όμως Thread; Thread [ελληνιστί "νήμα"], στην επιστήμη υπολογιστών, είναι η "συντόμευση" του όρου "thread of execution" [νήμα εκτέλεσης].

ΥΓ: Στόχος της συγκεκριμένης αναρτησης ήταν καθαρα και μονο να δώσει μια απλοϊκή επεξήγηση κι όχι επιστημονική αναλυση.

Java Concurrency In Practice [2]

Όπως έγραφα και στην προηγούμενη ανάρτηση ένα δεύτερο σημαντικό θέμα στην διαχείριση των Threads είναι η αποφυγή δημιουργίας απεριόριστων java.util.Timer, γιατι κάθε Timer εμπεριέχει κι απο ένα TimerThread. Οπότε αντιστοιχα έχουμε ένα Thread για κάθε Timer. Όμως υπάρχει επίσης αλλο ένα πρόβλημα με το java.util.Timer, καθε instance μπορεί να εκτελει "ταυτοχρονα" μονο ένα TimerTask. Οπότε αν του αναθέσουμε δυο TimerTask που πρέπει να ξεκινήσουνε μαζι, θα εκτελεστει το ένα και το αλλο θα θεωρηθεί εκπρόθεσμο.
Την λύση στο πρόβλημα του Timer το λύνει ένα ειδικού τύπου ThreadPoolExecutor, το ScheduledThreadPoolExecutor. Όπου το δημιουργούμε οριζοντας το πόσα Threads θα δημιουργηθούν στο Thread Pool, δηλαδη πόσες ταυτόχρονες εργασίες [Tasks] θέλουμε να γίνονται, ενώ αν ταυτοχρονα έχουν προγραμματιστει περισσότερες, αλλά δε υπάρχουν διαθέσιμα Threads τοτε απλά θα εκτελεστουν στη σειρα.
Παραδειγμα μπορείτε να βρειτε εδώ.

LinkWithin

Blog Widget by LinkWithin

Mobile edition