我在多线程应用程序中的类之间的交互中遇到了一些困难,我的主聊天服务器类首先创建一个 DBConnection 管理器类,然后为连接到我的服务器的每个客户端创建一个线程。当客户端连接时,我将连接传递给客户端线程,以便客户端可以与数据库交互,然后在完成时将连接返回到池中。
出现的问题是,如果与数据库的连接断开,我的客户端线程无法重新建立数据库连接池,因为它重新初始化的唯一方法是与其“ super ”通信,现在我不能使用 super 语句作为我的 clientThread 范围 Thread 而不是我的主聊天服务器类。我该如何解决这个问题?
最佳答案
委托(delegate)通常是比继承更好的设计选择。 Foo has a Bar 通常为您提供比 Foo is a Bar 更多的选择。
my clientThread extents Thread
不要那样做。您的 clientThread 对象应该只是一个普通的线程,它是用一些实现 Runnable 的 ClientFoobar 对象构造的。
class Client implements Runnable {
private final DBConnectionManager dbConnectionManager;
private ...other state...
public Client(DBConnectionManager dbConnectionManager,...) {
this.dbConnectionManager = dbConnectionManager;
...
}
@Override
public void run() { ...interact with remote client... }
}
Thread clientThread = new Thread(new Client(dbConnectionManager,...)).start();
关于java - 如何正确构建我的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246834/