Java线程:自动终止

时间:2016-01-13 22:25:22

标签: java multithreading sockets client

我想知道一旦完成它的工作,这个创建的线程(参考代码片段)是否会在垃圾收集中自动终止。

我正在创建一个基本的聊天程序,以学习如何使用套接字,创建客户端和制作服务器。我很快发现如果我想能够从客户端发送和接收消息,而不是仅在发送时更新,我需要多线程客户端。一个用于接收消息和更新GUI的线程,另一个用于发送。我有以下代码片段,只要我的聊天室GUI上的按钮触发ActionEvent,就会调用该代码片段。一旦我注意到每次发送消息时,我都开始担心,正在创建一个序列号更高的线程。我担心以前的线程没有被正确删除并且仍在内存中,因此数字越大。

代码:

public void send(String message)
{
    //Create a new thread so that the client can receive messages while it's sending them.
    Thread thread = new Thread(new Runnable()
    {
        /* (non-Javadoc)
         * @see java.lang.Runnable#run()
         */
        @Override
        public void run()
        {
            try
            {
                System.out.println("Writing chars");
                output.writeUTF(message);
            } catch (IOException exception)
            {
                System.out.println("Error attempting to write: " + message + " to the server.");
                exception.printStackTrace();
            }   
        }
    });
    thread.start();
}

1 个答案:

答案 0 :(得分:2)

run()方法返回后,Thread将终止并最终被垃圾回收。您会看到递增ID号,因为您正在为每个此类操作启动新线程 - 这不是建议的架构,但确实有效。