Question

Mon scénario est le suivant:

Je suis un serveur de mise en œuvre doit délai d'attente ou produire une réponse dans le délai spécifié pour chaque demande. Ainsi, chaque demande est assurée une réponse du point de vue du serveur (la réponse, bien sûr, pourrait ne pas atteindre le client en raison de l'échec de transport de couche, etc ...).

Afin de mettre en œuvre la sémantique ci-dessus, chaque requête génère un filetage (extrait effectivement disponibles à partir d'une piscine de fil) et attend sa réponse par l'intermédiaire d'un notifier sur un objet de synchronisation. La période d'attente est limitée à un délai d'attente envoyé à param de l'objet méthode attendre. Les délégués de fil donné naissance à la demande d'un objet qui sait réellement comment gérer la demande. est connu API d'appel de cet objet, mais il n'y a pas d'accord de niveau de service connu qui précise qu'un appel ne sera jamais bloquer indéfiniment. (Plus précisément dans mon cas, le serveur est en fait un client CORBA -. Mais ce n'est pas le point)

Maintenant, ce qui me intéresse, est de savoir si ou non il y a un moyen pour moi pour détecter en quelque sorte que ce fil ne répond pas, puis le tue (interrompre), même si je suis actuellement bloqué sur un appel de méthode?

Par ailleurs, je sais que je peux conserver une référence à l'objet de fil et après une quantité prédéfinie de temps appeler sa méthode d'interruption (). Malheureusement, cela ne garantit pas « interruption » sémantique ...

Java Discussion primitive Obsolescence

Merci à tous

Était-ce utile?

La solution

Je pense que si vous ne pouvez pas compter sur interruption () sémantique alors vous pouvez être hors de la chance. Il n'y a aucun moyen fiable ou sûr de mettre fin à un fil avec force. Il est dangereux dans toutes les langues.

J'espère que d'interruption () obtiendriez-vous ce que vous avez besoin, même si elle pourrait être contournée. Les appels CORBA devraient passer par les classes de réseau standard et devrait donc interrompre correctement sur tous les appels de blocage.

Il est le meilleur que vous pouvez faire à court de frai complet des processus enfants.

Autres conseils

Essayez d'utiliser un ExecutorService et faire se faire la logique métier réelle dans un appelable. L'avenir retourné par le ExecutorService a un get () qui vous permet de spécifier combien de temps vous attendre ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top