java - 后台线程死亡时其创建的子线程是怎么处理的?
巴扎黑
巴扎黑 2017-04-17 17:35:46
0
2
493

java一个后台线程启动的线程默认也是后台线程,那么当这个后台线程死亡的时候但这个时候用户线程还未死亡,它创建的子线程是怎样处理的?是随着父线程一同死亡还是继续运行,直至run方法结束或者用户线程死亡

巴扎黑
巴扎黑

répondre à tous(2)
洪涛
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() ;
                 }
        }
    }
}

Il s'agit d'un fil de discussion en arrière-plan d'un serveur que j'ai écrit hier. Ce fil est principalement utilisé pour surveiller le port 8001. Si une commande d'arrêt est reçue, le serveur sera arrêté. Après avoir arrêté le serveur, j'ai démarré un nouveau fil. , c'est-à-dire que lorsque le sous-thread du thread d'arrière-plan est réellement en cours d'exécution, le serveur n'est pas arrêté, donc je juge que le sous-thread mourra avec l'ensemble du thread d'arrière-plan. Il semble que le système d'exploitation doive lire. encore le livre. Désolé de déranger tout le monde

PHPzhong
this.setDaemon(true);

Parce que c'est Démon

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal