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

2 σχόλια:

Ανώνυμος είπε...

Δεν ξέρω αν είναι overkill, αλλά για τέτοιες δουλειές χρησιμοποιώ http://www.opensymphony.com/quartz/

Unknown είπε...

Ενδιαφέρον φαίνεται, θα το ψάξω αλλά γενικά προτιμώ να χρησιμοποιώ τις βιβλιοθήκες της Java πρώτα κι αν δε με καλύπτουν να κοιάζω παραπέρα.

LinkWithin

Blog Widget by LinkWithin

Mobile edition