许多 JDBC 驱动的一个共同问题是它们在任意时刻一个线程只能使用一个 Connection -- 否则可能一个线程在发送一个查询而另一个线程正在接受结果, 而这样做会导致服务器的混乱。
PostgreSQL JDBC 驱动是线程安全的。 所以,如果你的应用使用多线程,你可以不必考虑保证在任意时刻只有一个线程使用数据库的复杂算法。
如果一个线程在其他线程正在使用数据库时试图访问数据库, 那么它将一直等待直到另一个线程完成当前的操作。 如果这个操作是普通的 SQL 语句, 那么该操作就是发送该语句, 并获取任何 ResultSet (完整的). 如果这是一个捷径调用(例如: 从一个大对象里读取一个数据块),则其包含发送和接收各自的数据。
这一点有益于applications和applets,但在servlet中会引发性能问题。 如果你有好几个线程执行查询, 那么它们除一个之外其它都是暂停的。 为了解决这个问题,我们建议创建一个连接池。当一个线程需要使用数据库,它向管理类请求一个 Connection object。 管理器赋予该线程一个空闲连接,并把它标记为忙。 如果空闲连接不可用,管理器就打开一个。 一旦线程完成使用的连接,该线程把连接返回给管理器, 管理器就可以关闭该联接或者把它加到连接池。 管理器还要检查连接是否仍然激活,如果连接是死亡的,就把它从连接池删除。 这样做的缺点是增加了服务器端的负荷,因为对每个Connection都要创建一个会话。 它决定于你和你的应用的需要。