2010-10-03 4 views
0

Je travaille sur une bibliothèque qui utilise actuellement des sockets TCP standard. Un utilisateur final de ma bibliothèque s'enregistre en tant qu'auditeur et doit être notifié si/quand un message pertinent entre.Java: notifié sur le paquet entrant

Si je génère un thread de travail dans ma bibliothèque, il y a un problème de thread-mort où ma bibliothèque peut empêcher l'application de se terminer normalement lorsque tous les threads utilisateur meurent.

Y a-t-il un moyen d'être averti d'un nouveau paquet tcp entrant sans engendrer un nouveau thread ou obligeant l'utilisateur à interroger la bibliothèque?

Merci!

Répondre

1

Je ne sais pas la partie des prises, mais si lorsque vous engendrez le fil que vous le marquer comme un thread démon (setDaemon (true)), alors il ne sera pas arrêter l'application sortir .

0

Vous pouvez utiliser le thread qui lit les données du socket. Si le travail est lié au processeur, vous gagnerez peu en envoyant un autre thread juste pour envoyer l'événement. D'autre part, si vous construisez une bibliothèque, vous n'aurez aucun contrôle sur ce que l'utilisateur fera quand vous appelez la méthode de l'auditeur, donc je vous conseille d'utiliser un Executor interne et de donner à votre bibliothèque une méthode comme terminate(). L'appel de la méthode de l'auditeur serait délégué à un exécutable, que vous soumettriez à l'Executor (pourrait être un nouveauSingleThreadExecutor, un nouveauChaquePasseFaireChaîne ou tout ce qui vous semble le mieux). De cette façon, les utilisateurs savent qu'ils doivent appeler init() et terminate() - où init() initialiserait l'Executor et terminate() prendrait soin de l'arrêter. Cela vous permet d'avoir vos propres discussions dans votre bibliothèque et les empêcher d'arrêter l'application principale de fermer

Jetez un oeil à this, pourrait vous donner une meilleure idée de ce dont je parle.

Questions connexes