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的命令, 就关闭服务器, 关闭服务器我启动了一个新的线程, 也就是这个后台线程的子线程, 实际运行时,服务器并没有被关闭, 所以我判断子线程会随着整个后台线程一起死亡.