我想知道一旦完成它的工作,这个创建的线程(参考代码片段)是否会在垃圾收集中自动终止。
我正在创建一个基本的聊天程序,以学习如何使用套接字,创建客户端和制作服务器。我很快发现如果我想能够从客户端发送和接收消息,而不是仅在发送时更新,我需要多线程客户端。一个用于接收消息和更新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();
}
答案 0 :(得分:2)
在run()
方法返回后,Thread
将终止并最终被垃圾回收。您会看到递增ID号,因为您正在为每个此类操作启动新线程 - 这不是建议的架构,但确实有效。