Java:如何在不同的类中调用方法,该类扩展了Thread,并且是我的主类的Thread数组的一部分?

Java:如何在不同的类中调用方法,该类扩展了Thread,并且是我的主类的Thread数组的一部分?,java,multithreading,Java,Multithreading,我有一个简单的main类,它侦听套接字,并在线程加入时将(联网的)客户端添加到线程数组中(就像服务器侦听新的聊天客户端,并将每个客户端添加为线程,并将线程列表维护为数组) 其他方面正在工作,这些是服务器侦听的代码行,并将新的客户端添加到名为thdRunningClientsPool[]的线程数组中 //add a new ClientHandler type object( ClientHandler class extends Thread) to my Thread Array public

我有一个简单的main类,它侦听套接字,并在线程加入时将(联网的)客户端添加到线程数组中(就像服务器侦听新的聊天客户端,并将每个客户端添加为线程,并将线程列表维护为数组)

其他方面正在工作,这些是服务器侦听的代码行,并将新的客户端添加到名为thdRunningClientsPool[]的线程数组中

//add a new ClientHandler type object( ClientHandler class extends Thread) to my Thread Array
public void run() {
............
 thdRunningClientsPool[intRunningClients]= new 
                   Thread( new ClientHandler(clientSocket));
 thdRunningClientsPool[intRunningClients].start();
现在,ClientHandler类有了一个方法 无效发送消息(字符串消息)

添加新客户端后,如何使用此SendMessage方法发送消息?当我用这个的时候

thdRunningClientsPool[intRunningClients].SendMessage("hi");
找不到SendMessage方法。Java将thdRunningClientsPool(IntRunningClient)视为线程,而不是ClientHandler类的对象,因此我无法访问SendMessage方法

我怎样才能解决这个问题?非常感谢您的任何建议:)
THxxx

首先,一般建议:使用
实现可运行的
而不是
扩展线程
。这会帮你省去很多后顾之忧

至于您的问题,您不能对作为参数传递给您的实例的
线程
实例调用
sendMessage
。您必须更改代码以保留对
ClientHandler
s的引用;您实际上不需要外部
线程
实例的数组。只要启动它们,放开它们


您还应该重新考虑自己启动所有这些线程的选择,这通常是一个坏主意,因为它会浪费系统资源。但是,重新设计代码的这一方面超出了您的问题范围。

首先,一般建议:使用
实现可运行的
而不是
扩展线程。这会帮你省去很多后顾之忧

至于您的问题,您不能对作为参数传递给您的实例的
线程
实例调用
sendMessage
。您必须更改代码以保留对
ClientHandler
s的引用;您实际上不需要外部
线程
实例的数组。只要启动它们,放开它们


您还应该重新考虑自己启动所有这些线程的选择,这通常是一个坏主意,因为它会浪费系统资源。但是,重新设计代码的这一方面超出了问题的范围。

什么是
ClientHandler
?它是扩展线程还是实现可运行?您为什么不使用其中一个内置线程池?什么是
ClientHandler
?它是扩展线程还是实现可运行?你为什么不使用内置线程池呢?thx Marko。稍后我会将其更改为Runnable,因为这不是一个大项目。根据您的回答,如果我持有对ClientHandler类的引用,我实际上如何做(我知道这听起来像是一个Noob问题)。。。我必须使用arraylist、list、vector,或者是否有其他选项?:)如果您愿意,只需将其设置为
ClientHandler
的数组即可。然后,你的问题中的行将按照你的意愿编译和运行。它是有效的!!!!!!!!!!这么简单。我应该让thdRunningClientsPool成为ClientHandler类型的数组。我仍然有发送消息的问题,但这肯定是一些其他的逻辑错误,我应该能够修复自己以后。愿Java之神带给你一年没有空指针异常的日子!太晚了,从新年开始,我已经吃了十几个了:)thx Marko。稍后我会将其更改为Runnable,因为这不是一个大项目。根据您的回答,如果我持有对ClientHandler类的引用,我实际上如何做(我知道这听起来像是一个Noob问题)。。。我必须使用arraylist、list、vector,或者是否有其他选项?:)如果您愿意,只需将其设置为
ClientHandler
的数组即可。然后,你的问题中的行将按照你的意愿编译和运行。它是有效的!!!!!!!!!!这么简单。我应该让thdRunningClientsPool成为ClientHandler类型的数组。我仍然有发送消息的问题,但这肯定是一些其他的逻辑错误,我应该能够修复自己以后。愿Java之神带给你一年没有空指针异常的日子!太晚了,从新年开始我已经吃了十几个了:)