java一个后台线程启动的线程默认也是后台线程,那么当这个后台线程死亡的时候但这个时候用户线程还未死亡,它创建的子线程是怎样处理的?是随着父线程一同死亡还是继续运行,直至run方法结束或者用户线程死亡
private class StopServer extends Thread { public void start() { this.setDaemon(true); super.start() ; } @Override public void run() { ServerSocket serverSocket = null ; Socket socket = null ; try { serverSocket = new ServerSocket(8001) ; while (true) { socket = serverSocket.accept(); String line = new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine(); if (line.equals("shutdown")) { socket.getOutputStream().write("ok, start stop the server....\r\n".getBytes()); socket.getOutputStream().flush() ; System.out.println("start a new thread to stop the server....") ; //新创建的子线程 new Thread() { public void start() { setDaemon(true); super.run(); } public void run() { System.out.println("start stopServer Thread..."); EchoServer2.this.stop(); } }.start(); break ; } else { if (!socket.isClosed()) socket.close(); } } } catch (IOException e) { System.err.println("daemon thread exception: " + e); e.printStackTrace(); } finally { System.out.println("stop stopServer..."); if(serverSocket != null && !serverSocket.isClosed()) try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } if(socket != null && !socket.isClosed()) try { socket.close(); }catch (IOException e) { e.printStackTrace() ; } } } }
這是我昨天自己寫的一個伺服器的一個後台線程, 這個線程主要用來監聽8001端口, 如果收到shutdown的命令, 就關閉服務器, 關閉服務器我啟動了一個新的線程, 也就是這個後台線程的子線程, 實際運行時,伺服器並沒有被關閉, 所以我判斷子線程會隨著整個後台線程一起死亡, 看來操作系統得重新念一遍書了. 煩擾大家了
this.setDaemon(true);
因為是Daemon
這是我昨天自己寫的一個伺服器的一個後台線程, 這個線程主要用來監聽8001端口, 如果收到shutdown的命令, 就關閉服務器, 關閉服務器我啟動了一個新的線程, 也就是這個後台線程的子線程, 實際運行時,伺服器並沒有被關閉, 所以我判斷子線程會隨著整個後台線程一起死亡, 看來操作系統得重新念一遍書了. 煩擾大家了
因為是Daemon