threadpool - Java application with httpServer hangs for 45 seconds before exiting -
I'm playing with a little bit with Java Accord Class. When I run my trial application, it will primarily reach the last line (a println) in a way, but then it sits for approximately 45 seconds before closing the application. Why does it do this and there is a way to do this so that it ends up fast? Thanks
Public Stace Voice Men (String [] Args) IOException throws {InetSocketAddress addr = new InetSocketAddress ("127.0.0.1", 8780); HTTP Server Server = HTTPS Server. Build (ADR, 0); Server.createContext ("/", New MyHandler ()); Server.setExecutor (Executors.newCachedThreadPool ()); Server.start (); URL url = new URL ("http: // localhost: 8780 / test"); HttpURL Connection Connection = (HttpURL Connection) url.openConnection (); Connection.setRequestMethod ("GET"); InputStreamReader (connection.getInputStream ())); // response header system.out.println ("\ nHTPP response header"); For (int i = 0 ;; i ++) {string header name = connection.getHeaderFieldKey (i); String header value = connection.getHeaderField (i); If (header name == empty & headerValue == faucet) {// No more top header breaks; } And if (header name == empty) {System.out.println ("+ + headerValue"); } Else System.out.println ("+ + + + header name +": "+ headerValue);} Connection.disconnect (); server.stop (0); System.out.println (" server closed. ");} / / End Main ()} Implementation of Class MyHandler HTTPHandler {@ Override Public Wide Handle (HTTP Exchange Exchange) throws IOException {System.out.println ("=== Enter MyHander ==="); System.out.println ( "HTTP request header:"); // request methode and url system.out.println ("+ + exchange.getRequestMethod () + +" + exchange.getRequestURI () + "" + Exchange.getprotocol ()) Print ; // Request header header titles Print to stop headers = exchange .getRequestHeaders (); for (string name: requestHeaders.keySet ()) {list & lt; string & gt; values = requestHeaders.get (name); (string value: value) {System.out.println ("+ +": "+ value); }} // If any buffer reader = new buffed reader (New InputStreamRadder (Exchanges .getRequestBody ()) Request Body Print Out; String sCurrentLine; System.out.println ("\ nHPP Request Body:"); (! In.ready ()) System.out.println ("no request physical"); Else {while ((sCurrentLine = in.readLine ()) = null {} System.out.println ("+ + sCurrentLine); }} Set up and send feedback String request method = exchange.getRequestMethod (); if (requestMethod.equalsIgnoreCase ("GET")) {header responseheader = exchange.getresons header (); Respon Seheaders.set ("content-type", "text / html"); Exchange.sendResponseHeaders (200, 0); OutputStream ReactionBody = ExchangeGatesResponsible (); ResponseBody.write ("& lt ;; DOCTYPE html & gt; Lt; html & gt; & lt; body & gt; & lt; h1 & gt; my feedback header & lt; / h1 & gt; & lt; p & gt; and some sample data. & Lt; / p & gt; ; & Lt; / body & gt; & lt; / html & gt ;, getBytes ()); responseBody.close ();} Exchange.close ();} // end public zero handle ()} // Class
I found something that seems to work though I'm not sure F it is the right way of dealing with this. It has not been tested extensively, but it switches it fast
I changed:
server.setExecutor (Examiner.NewCachad ThreadPaul) ); With :
Executor service excu = Executor. Newcastle Threadpool (); Server.setExecutor (excu); then server.stop (0); Before excu.shutdown ();
Comments
Post a Comment