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