java - 如何正确构建我的类(class)

标签 java mysql multithreading connection-pooling

我在多线程应用程序中的类之间的交互中遇到了一些困难,我的主聊天服务器类首先创建一个 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/

相关文章:

java - 主题中带有电子邮件地址的 x509 证书在 java .vs net 中不同

java - 使用 Spring @RestController 和 @QuerydslPredicate 来处理 GET With ZonedDateTime 参数

java - 执行调用返回集合的 java 静态方法的 groovy 脚本时出错

javascript - 停止多个 setTimeout 实例

java - 如何在 Spring Remoting 中设置动态 header

mysql - 通过不显示空值进行分组

mysql - 在 MySQL 中存储 AWS ARN 的最佳数据类型?

php - 查询用不同的表构建类别和子类别导航

c# - 在C#中挂起一个线程:Error

java - 无锁数组元素交换