如何正确构建我的类

时间:2014-04-23 14:05:46

标签: java mysql multithreading connection-pooling

我在多线程应用程序中的类之间的交互中遇到了一些困难,我的主聊天服务器类首先创建一个DBConnection管理器类,然后为连接到我的服务器的每个客户端创建一个线程。当客户端连接时,我将连接传递给客户端线程,以便客户端可以与数据库交互,然后在完成时将连接返回到池。

问题是,如果与DB的连接断开,我的客户端线程无法重新建立数据库连接池,因为它可以重新初始化的唯一方法是与其超级&#39交谈;,现在我不能使用super语句作为我的clientThread范围Thread而不是我的主要chatserver类。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

委托通常是比继承更好的设计选择。 Foo 一个Bar经常比Foo 一个Bar提供更多选项。

  

我的clientThread范围线程

不要那样做。您的clientThread对象应该只是一个普通的Thread,它由一些实现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();

答案 1 :(得分:0)

弄清楚如何使用你的一些见解@james

来做到这一点

我改变了:

    public class clientThread extends Thread {
    }

要:

    public class clientThread extends MultiThreadChatServer implements Runnable {
    }

这允许我在删除数据库连接时使用我的超类重新初始化我的连接池。

在我的Main类MultithreadChatServer中,我创建了一个重新启动数据库连接的函数(在应用程序启动时也会调用它)现在我的每个线程都会在需要时使用池中的连接(只需要当然,游泳池足够大)