2013-04-10 10 views
24

Przykład zaczerpnięty z poradnika Embedded Jetty sugeruje następujące:Wbudowany Jetty dlaczego używać dołączyć

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

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

Dlaczego muszę dodać linię server.join()? Bez niego działa dobrze.

Odpowiedz

-2

join() blokuje do momentu, aż serwer będzie gotowy. Zachowuje się jak Thread.join() i rzeczywiście wywołuje join() puli wątku Jetty. Wszystko działa bez tego, ponieważ pomost zaczyna się bardzo szybko. Jednak jeśli twoja aplikacja jest wystarczająco ciężka, start może zająć trochę czasu. Wywołanie join() gwarantuje, że po tym serwer jest rzeczywiście gotowy.

+0

To naprawdę nie jest tak szybkie, zajęło 1/3 minuty, aby załadować serwer, nadal nie widzę, jak join pomoże mi. –

+17

'Server.join()' czeka na całkowite zatrzymanie serwera, bez niego zaczynałby się przykład w pytaniu, a 'main()' kończyłby się powodując zamknięcie JVM. –

+6

'Server.start()' zostanie zwrócony po zakończeniu głównego cyklu życia serwera. Który zawiera wszystkie komponenty, które określasz i dołączasz do Serwera przed wywołaniem 'Server.start()'. Zauważ jednak, że niektóre komponenty, takie jak DeploymentManager (którego pytanie nie używa) mają własny wątek, który nie jest zgodny z tym uogólnieniem. Dobrą praktyką jest, na przykład, zapytanie Złącza o ich stan po 'Server.start()' i przed 'Server.join()' –