【发布时间】:2016-01-13 22:25:21
【问题描述】:
我想知道正在创建的这个线程(参考代码 sn-p)是否会在完成工作后在垃圾回收中自动终止。
我正在创建一个基本的聊天程序来学习如何使用套接字、创建客户端和创建服务器。我很快发现,如果我希望能够从客户端发送和接收消息,而不仅仅是在发送时更新,我需要对客户端进行多线程处理。一个线程用于接收消息和更新我的 GUI,一个线程用于发送。我有以下代码 sn-p,只要我的聊天室 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();
}
【问题讨论】:
-
为什么每次客户端要发送消息时都创建一个新线程?对于这样的客户端,您需要多个线程,但它们应该在程序运行期间运行并在内部队列中添加和删除消息。
-
您可能想要使用一些队列,例如。 BlockingQueue。我建议您阅读有关 Java 并发的一般知识,例如 Java Concurrency Tutorial by Jenkov
标签: java multithreading sockets client