多线程,java聊天客户端
我正在开发一个简单的聊天客户端,我需要服务器来处理多个线程(每个连接1个) 目前我只有一个用户和一个连接多线程,java聊天客户端,java,multithreading,Java,Multithreading,我正在开发一个简单的聊天客户端,我需要服务器来处理多个线程(每个连接1个) 目前我只有一个用户和一个连接 Thread con = new Thread(new Connection()); con.start(); Connection()负责侦听来自此特定连接的消息,并将其广播到每个客户端(目前只有一个客户端) 我计划创建一个连接对象数组,并为每个对象创建一个线程,但我不确定从现在开始应该做什么,在这种情况下,“con”实际上代表什么 请参见此处的示例,具体如下: private Arra
Thread con = new Thread(new Connection());
con.start();
Connection()负责侦听来自此特定连接的消息,并将其广播到每个客户端(目前只有一个客户端)
我计划创建一个连接对象数组,并为每个对象创建一个线程,但我不确定从现在开始应该做什么,在这种情况下,“con”实际上代表什么 请参见此处的示例,具体如下:
private ArrayList<ClientSocket> clients;
...
while (!disconnect){
Socket skt = srvr.accept();
ClientSocket client = new ClientSocket(skt);
keepAlive.addToQueue(client);
clients.add(client);
}
私有ArrayList客户端;
...
同时(!断开连接){
套接字skt=srvr.accept();
ClientSocket客户端=新的ClientSocket(skt);
keepAlive.addToQueue(客户端);
客户。添加(客户);
}
如果连接
是一个自定义类,其中包含关于某个连接的信息(我假设是这样),那么您不希望将其传递到线程中
您可能会从阅读Java文档中获益。您可能希望在每次从客户端接收连接时启动一个新线程()。您可以使用以下代码段完成此操作:
new Thread(){
public void run() {
System.out.println("blah");
}
}.start();
在run()
函数中放入的任何代码都将在线程中运行
为了回答问题的第二部分,在示例中,con
对象表示执行线程的单个实例 正如您所说,目前您只有一个线程和一个用户
Thread con = new Thread(new Connection());
con.start();
如果您需要多个线程,处理多个连接,那么您需要多个con。(con是一个线程,我们需要多个线程)
也许for循环对你有用
Thread[] connections = new Thread[/*number of connections*/];
for (int i = 0; i < connections.length(); i++)
{
connections[i].start();
}
您的设置有点奇怪,但我假设您正在调用ServerSocket.accept()
构造函数的新连接下的某个地方。
如果您不是,那么您需要某种方法,只在客户端连接时创建一个线程,否则这个while循环将大量运行。
通常,我会有一个连接对象来处理它自己的线程和其他细节,而不是一个线程来处理它的连接对象。最后,您可能需要修改一些代码。什么是连接?它是否实现Runnable?是的,它从bufferreader读取行
ArrayList<Thread> connections = new ArrayList<Thread>();
while (true)
{
Thread c = new Thread(new Connection());
connections.add(c);
c.start();
}