Java:如何在扩展Thread的另一个类中调用一个方法,并且是我主类中的一个Thread Array的一部分?

时间:2013-01-28 13:20:53

标签: java multithreading

我有一个简单的主类,它可以监听套接字,并在加入时将(网络)客户端添加到一个Thread数组中(比如服务器正在侦听新的聊天客户端,并将每个客户端添加为一个线程,并维护作为数组的线程列表。)

其他工作正常,这些是服务器侦听的代码行,并将新客户端添加到名为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类有一个方法     void SendMessage(string message)

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

thdRunningClientsPool[intRunningClients].SendMessage("hi");

找不到SendMessage方法。 Java将thdRunningClientsPool(intRunningClients)视为一个线程,而不是ClientHandler类的对象,因此我无法访问我的SendMessage方法。

我该如何解决这个问题?任何建议非常感谢:) THxxx

1 个答案:

答案 0 :(得分:4)

首先,一般建议:使用implements Runnable代替extends Thread。将为您节省很多麻烦。

至于你的问题,你不能在作为参数传递你的实例的sendMessage实例上调用Thread。您必须更改代码才能保留对ClientHandler的引用;你真的不需要外部Thread实例的数组。只需启动它们就可以了解它们。

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