【问题标题】:Multithreading with PostgreSQL JDBC使用 PostgreSQL JDBC 的多线程
【发布时间】:2023-01-06 21:50:03
【问题描述】:

我仍然是一名学生,对多线程和数据库没有那么丰富的经验,所以我可能错过了一些明显的东西——希望能得到初学者水平的答案。 我正忙于创建一个虚拟 Java 应用程序,允许用户提交地铁站位置,然后查找离他们位置最近的车站。这一切都发生在 HTTP 上。 此应用程序的后端是 PostgreSQL(带有 PostGis),我通过 PostgreSQL JDBC 连接到数据库。 我希望我的应用程序尽可能多线程。每次我收到一个新的 HTTP 连接时,我都会启动一个新线程并为用户请求提供服务。但是,如果对数据库的读写本身不能并行,我不确定这有多大意义。 根据this,PostgreSQL JDBC 不是线程安全的。但这到底是什么意思呢?这是否仅仅意味着单个连接中的读取和写入不是线程安全的(即在 DriverManager.getConnection() 的每个实例中)?但是,如果我每次收到 HTTP 请求时都建立一个新连接怎么办?并行执行是否安全?这会严重影响性能吗? 关于采取广泛方法的任何其他建议?

【问题讨论】:

  • 该请求已经在一个单独的线程中处理,为什么要旋转一个新线程?

标签: postgresql multithreading parallel-processing postgis


【解决方案1】:

JDBC 通常不是线程安全的,不仅仅是 Postgres 驱动程序。

这意味着您不能同时在多个线程中运行从同一个 Connection 实例创建的多个语句。

如果要并行运行两条语句,则需要创建两个不同的数据库物理连接。

由于创建连接不是免费的,通常的方法是有一个连接池(例如通过ConnectionPoolDataSource)来保持一组连接打开。然后,应用程序从池中获取连接,并在查询(或事务)完成后将它们放回原处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2015-12-31
    • 2018-06-12
    • 2014-11-24
    • 2013-10-12
    相关资源
    最近更新 更多