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

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

巴扎黑
巴扎黑

membalas semua(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() ;
                 }
        }
    }
}

Ini adalah utas latar belakang pelayan yang saya tulis semalam, utas ini digunakan terutamanya untuk memantau port 8001. Jika arahan penutupan diterima, pelayan akan ditutup Selepas mematikan pelayan, saya memulakan utas baharu , iaitu ini Apabila sub-benang latar belakang sebenarnya berjalan, pelayan tidak ditutup, jadi saya menilai bahawa sub-benang akan mati bersama-sama dengan keseluruhan utas latar belakang Nampaknya sistem pengendalian perlu membaca buku sekali lagi maaf mengganggu semua

PHPzhong
this.setDaemon(true);

Sebab ia Daemon

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan