J'ai un objet mythread que j'instancie lorsque mon application est chargée via le serveur, je le marquai comme un thread de démon, puis appelle merci
Ittai p>
mise à jour:
Le module que je fais référence à mon application est une application Web qui compte quelques threads en fait de ce type et ce qu'ils ont en commun, c'est qu'ils sont tous dans le start () code> dessus. Le fil est destiné à s'asseoir et à attendre des informations d'une file d'attente tant que l'application est active.
Mon problème / question est la suivante: Actuellement myThread s'étend sur le thread parce que je le marquai comme démon et j'ai lu sur la manière dont il est plus précieux de mettre en œuvre des exécutants exécubles et d'utiliser des exécuteurs. Donc, ce que je voulais demander, c'est si MyTythread mettra en œuvre runnable au lieu d'étendre le thread (et sera renommé) et je vais utiliser
Newsinglethreadscheduledexecutor () Code> Comment, quoi ou peut-être, est-ce que je marque quelque chose comme démon.
J'espère que je n'ai pas fait de gâcherie, veuillez m'excuser si je dispose que certaines parties de l'environnement multithreading sont très nouvelles pour moi. P>
servleContext code> en tant que membre de divers les raisons. Actuellement, j'étends
thread code> à
Webthread code> qui a le
servletContext code> comme meme et toutes les sous-classes peuvent utiliser ceci. Si je passe au paradigme runnable avec l'exécuteur exécutante et filefactoire que fondamentalement, je dois avoir une hybride laid de
webunnable code> quelconque
exécutable code> et contient le
servleContext Code> En tant que membre public et avoir mon
FilmFactory Code> Implémente
NEWTHEAD (WEBRUNNABLE ARG0) CODE> En plus de
NEWTHEAD (Runnable Arg0) Code>.
Je ne suis pas sûr de quoi de mieux.
Merci p>
3 Réponses :
Si vous utilisez un exécuteur programmé, vous pouvez fournir un filefactory . Ceci est utilisé pour créer de nouveaux threads et vous pouvez les modifier (par exemple, effectuez-les démon) comme vous le souhaitez. P>
EDIT: Pour répondre à votre mise à jour, votre TrainFactory CODE> Il suffit de mettre en œuvre
NEWTHEAD (Runnable R) code> puisque votre
webrunnable code> est un em>
Runnable code>. Donc, pas de vrai travail supplémentaire. p>
+1 pour l'exactitude technique - mais y a-t-il un avantage dans l'utilisation de l'exécuteur dans ce contexte? Semble un peu de "complexité de la complexité de la complexité" pour moi (mais peut-être que je me trompe sur cette ...)
Peut-être pas. Mais j'ai écrit des systèmes avant qui utilisent un seul exécuteur de thread pour commencer et branché différents exécuteurs à une étape ultérieure.
@ Brian- je pense à ce que Hjhill pense. J'ai un fil en tant que tel et je ne suis pas sûr si cela vaut la peine d'utiliser la filefactoire
@Brian encore, après avoir regardé les choses une fois sur votre solution, est intéressant si quelque peu robuste mais j'ai mis à jour la question donc je vous serais reconnaissant si vous pouviez prendre un autre look et m'aider
Mon webrunnable code> est un
exécutable code> mais pour le fichier
Filffactory code> Pour pouvoir définir le fichier
servleContext code> membre dans le < Code> Webrunnable Code> Il doit mettre en œuvre
NEWTHEAD (webrunnable r) code> comme
Runnable code> n'a pas la méthode setservletContext () définie. De plus, j'ai un membre public (membre servleContext) exposé sur l'interface webrunnable. Ma question est que si lorsque vous avez besoin d'un membre de ce groupe de runnable / thread, n'est-ce pas plus sage d'utiliser l'héritage? Je ne suis vraiment pas sûr
NEWTHEAD (Runnable R) peut avoir à vérifier que vous passez dans le type de type runnable correct via "l'instanceOf" et effectuez des travaux supplémentaires si nécessaire. Mais je ne pense pas que ce soit le travail de la méthode de Newthread (). Il est juste là pour créer un fil, pas manipuler un runnable
Découvrez le Javadoc pour NewsingleThreadscheduledexecutor (TrainFactory TeinteFactory) Code>
Il serait mis en œuvre quelque chose comme ceci: P>
public class MyClass { private DaemonThreadFactory dtf = new DaemonThreadFactory(); private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(dtf); // ....class stuff..... // ....Instance the runnable..... // ....submit() to executor.... } class DaemonThreadFactory implements ThreadFactory { public Thread newThread(Runnable r) { Thread thread = new Thread(r); thread.setDaemon(true); return thread; } }
Salut Stu, tout d'abord merci pour votre réponse détaillée, mais je ne suis pas sûr de voir ma mise à jour? J'ai mis à jour la question avec le fait que j'ai besoin de mon threads / runnables code> pour avoir un objet de
servleContext code> lorsque exécution est effectué et je me demande comment cela peut être acoclé avec Runnable . Je sais qu'avec héritage de
thread code>, ce n'est pas un problème pour le brancher dans le
Filffactory code> mais je ne suis pas sûr si ou comment il est possible avec le paradigme annulable.
Ah, non, je n'ai pas: P (J'ai ouvert votre question de répondre, mais j'ai pris mon temps d'y arriver.) I> Permettez-moi de penser que par un peu et vérifiez l'autre réponse ...
Ce que j'ai décidé de faire (peut être changé cependant) consiste à avoir une classe singleton code> qui a un
commonResourcesmap code> qui sera
runnable code> sans problème.
Je suis sûr qu'il y aura des millions de classes daemonthreadfactory créées dans le monde entier, simplement parce que les exécuteurs ne fournissent pas de moyen d'utiliser des threads de Damon.
juste pour compléter avec une autre solution possible pour la complétude. Ce n'est peut-être pas aussi gentil cependant.