多线程,java聊天客户端

多线程,java聊天客户端,java,multithreading,Java,Multithreading,我正在开发一个简单的聊天客户端,我需要服务器来处理多个线程(每个连接1个) 目前我只有一个用户和一个连接 Thread con = new Thread(new Connection()); con.start(); Connection()负责侦听来自此特定连接的消息,并将其广播到每个客户端(目前只有一个客户端) 我计划创建一个连接对象数组,并为每个对象创建一个线程,但我不确定从现在开始应该做什么,在这种情况下,“con”实际上代表什么 请参见此处的示例,具体如下: private Arra

我正在开发一个简单的聊天客户端,我需要服务器来处理多个线程(每个连接1个)

目前我只有一个用户和一个连接

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