2013-04-10 20 views
24

Un esempio tratto da un tutorial Jetty embedded suggerisce la seguente:embedded Jetty perché utilizzare unirsi

public static void main(String[] args) throws Exception 
{ 
    Server server = new Server(8080); 
    server.setHandler(new HelloHandler()); 

    server.start(); 
    server.join();} 

Perché ho bisogno di aggiungere la linea server.join()? Funziona senza di esso.

risposta

-2

join() sta bloccando finché il server non è pronto. Si comporta come Thread.join() e in effetti chiama join() del pool di thread di Jetty. Tutto funziona senza questo perché il molo parte molto velocemente. Tuttavia, se la tua applicazione è abbastanza pesante, l'avvio potrebbe richiedere del tempo. La chiamata di join() garantisce che dopo di esso il server sia effettivamente pronto.

+0

Non è davvero così veloce, ci sono voluti 1/3 di minuto per caricare un server, ancora non vedo come unirsi mi aiuterà. –

+17

'Server.join()' attende che il server si fermi completamente, senza che l'esempio nella domanda venga avviato e 'main()' uscirebbe causando l'arresto di JVM. –

+6

'Server.start()' restituirà una volta che il ciclo di vita principale del server ha completato l'avvio. Che include tutti i componenti specificati e collegati al server prima della chiamata a 'Server.start()'. Si noti tuttavia che alcuni componenti, come DeploymentManager (che la domanda non usa) hanno il loro thread che non è legato a questa generalizzazione. È buona norma, ad esempio, chiedere ai Connector il loro stato dopo 'Server.start()' e prima di 'Server.join()' –