Intégré Jetée pourquoi utiliser jointure
Un exemple pris sur un Intégré à l'Embarcadère tutoriel suggère ce qui suit:
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
server.setHandler(new HelloHandler());
server.start();
server.join();}
Pourquoi ai-je besoin d'ajouter la ligne server.join()
? Il fonctionne très bien sans elle.
Vous devez vous connecter pour publier un commentaire.
join()
est bloquant jusqu'à ce que le serveur est prêt. Il se comporte commeThread.join()
et en effet les appelsjoin()
de la Jetée du pool de threads. Tout fonctionne sans ce en raison de la jetée démarre très rapidement. Toutefois, si votre application est assez lourd, le démarrage peut prendre un certain temps. Appel dejoin()
garantit que le serveur est en effet prêt.Server.join()
attend pour le serveur pour arrêter totalement, sans elle, l'exemple à la question de départ et lamain()
serait sortie causant la JVM à l'arrêt.Server.start()
sera de retour une fois que le principal du cycle de vie du serveur a terminé de démarrage. Qui inclut tous les composants vous préciser et joindre le Serveur avant l'appel àServer.start()
. Notez toutefois que certains éléments, tels que la DeploymentManager (dont la question n'utilise pas) ont leur propre thread qui n'est pas redevable de cette généralisation. Il est de bonne pratique, par exemple, de demander les Connecteurs pour leur état aprèsServer.start()
et avantServer.join()
Server.start()
attend pour le serveur de démarrer correctement. Il suit la Composante du Cycle de vie du comportement de la Jetée. Les composants qui génèrent des threads et de se comporter en dehors du Cycle de vie, sont exclus de cette déclaration (comme le système de fichiers changement de Scanner et DeploymentManager)