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

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 τοτε απλά θα εκτελεστουν στη σειρα.
Παραδειγμα μπορείτε να βρειτε εδώ.
Δημοσίευση σχολίου

Gadget

Αυτό το περιεχόμενο δεν είναι ακόμα διαθέσιμο μέσω κρυπτογραφημένων συνδέσεων.

LinkWithin

Blog Widget by LinkWithin

Mobile edition