Java线程对象如何从原始类调用方法?

Java线程对象如何从原始类调用方法?,java,multithreading,server,client,client-server,Java,Multithreading,Server,Client,Client Server,我有一个客户机-服务器聊天程序,其中服务器将为每个接受的连接创建一个新线程,其中NewClient扩展线程以处理来自特定客户机的请求 以下是服务器代码的一个片段: public void startServer() { // thread to handle requests new Thread(() -> { try (ServerSocket serverSocket = new ServerSocket(port)) { Sy

我有一个客户机-服务器聊天程序,其中服务器将为每个接受的连接创建一个新线程,其中NewClient扩展线程以处理来自特定客户机的请求

以下是服务器代码的一个片段:

public void startServer() {
    // thread to handle requests
    new Thread(() -> {
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server started at " + new Date());

            while (true) {
                // listen for connection request
                Socket socket = serverSocket.accept();

                // increment total clients connected
                clientCount++;

                // create new client
                NewClient newClient = new NewClient(socket, clientCount);

                // add client to active client list
                activeClientList.add(newClient);

                // start thread
                newClient.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }).start();
}
在NewClient中,线程将循环并检查输入流。如果检测到输入流,我希望它将输入流中的消息广播给所有客户端

以下是NewClient的运行方法:

public void run() {
    while(true) {
        try {
            // read from client
            Data message = (Data) objectInputStream.readObject();
            System.out.println("Received " + message.text + " from " + message.name);

            // broadcast to all clients
            // broadcastMessage(message)


        } catch (IOException | ClassNotFoundException e) {
            System.out.println("Failed to get input stream");
            e.printStackTrace();
        }
    }
}
在server类中,有一个名为broadcastMessage(数据数据)的方法,它将在数组列表中循环通过所有连接的客户端,并使用输出流将数据发送到每个客户端

方法如下:

public synchronized void broadcastMessage(Data data) {
    Integer size = activeClientList.size();

    // loop through all clients
    for(int i=size-1;i>=0;i--) {
        NewClient client = activeClientList.get(i);

        if(!client.writeToClient(data)) {
            activeClientList.remove(i);

            // notify users of disconnect
            Data update = new Data(data.name, data.name + " has disconnected.");
            broadcastMessage(update);
        }
    }
}
我知道如果这是一个匿名线程,我可以从服务器内部调用广播方法。如何在线程类中调用此方法

提前感谢您的反馈

// create new client
NewClient newClient = new NewClient(socket, clientCount, this);

谢谢Johannes Kuhn指出服务器可以被传递到线程构造函数来调用方法。< /P>把它引用到服务器到它的构造函数上。你是指NeXclipse(Socket,CclipTeCo,这个)吗?是的,类似的东西。谢谢,我甚至没有考虑过。