Σάββατο 5 Απριλίου 2008

Java Concurrency in Practice

Τις τελευταίες δυο βδομάδες έχει προκύψει στην δουλεια η ανάγκη για χρήση πολλαπλών Thread αναζήτησης για να εξυπηρετούν ένα Thread [request] καθε client. Δηλαδή έχει ζητηθει ο πελάτης να ζητάει, για παραδειγμα, ξενοδοχείο στην Αθήνα για δυο νύχτες την 21η Μαϊου 2008 κι αυτό θα πρέπει απο το πρόγραμμα να σπάει σε αναζήτηση ξενοδοχείων σε διάφορα εξωτερικά συστήματα. Αλλά προκειμένου να μειώσουμε τον χρόνο που θα χρειαστεί για να εξυπηρετήσει τον τελικό πελάτη, αποφασίσαμε να ανοίγουμε πολλαπλά Threads που παράλληλα θα αναζητούν ξενοδοχεία στα διάφορα εξωτερικά συστηματα.
Αλλά όπως είναι γνωστό, αλλα και λογικο, δεν είναι σωστό να ανοίγεις ανεξέλεκτα Threads. Γιατι αυτά μεταφράζονται σε Threads που ανοίγονται στο λειτουργικό σύστημα, όπου υπάρχει ένας περιορισμός. Οπότε αποφασίσαμε να οδηγηθούμε σε μια πιο σωστή λύση, που ειναι το να περιορίσουμε το μέγιστο πλήθος Thread, δηλαδή να χρησιμοποιήσουμε ThreadPooling. Κατι που φανταζει δύσκολο και περιπλοκο αλλά στην πραγματικότητα ειναι πανεύκολο! Πολύ απλά πρέπει να υλοποιήσεις ένα Interface που ονομάζεται Callable και το οποιο ειναι κάτι πιο προχωρημένο απο το απλό Runable, καθώς επιστρέφει αποτέλεσμα! Οπότε αν έχεις κάποια διαδικασία που πρόκειται να επιστρέψει αποτέλεσμα μπορείς πολύ εύκολα να υλοποιήσεις την Callable που θα γυρνάει στο τέλος αυτό το αποτέλεσμα!
Κατεβάστε τον κώδικα-παράδειγμα εδώ

ΥΓ: Σύντομα θα γραψω και για άλλο ένα γνωστό, παρομοιο, πρόβλημα που υπάρχει όταν χρησιμοποιείται το java.util.Timer

Δεν υπάρχουν σχόλια:

LinkWithin

Blog Widget by LinkWithin

Mobile edition