当前位置: 首页 > 面试题库 >

连接池会使多线程Java程序受益吗

苏波涛
2023-03-14
问题内容

我有一个Java进程,它启动大约60个线程,每个线程都访问一个MySql数据库。

使用C3P0这样的连接池是否会受益?还是仅适用于可扩展到大量用户的Web应用程序?

今天,我们有长期存在的JDBC连接(每个线程一个),我的计划是在每个SQL查询/插入之前从连接池中获得一个连接。

我想知道这是否会使我们的应用程序更稳定?另外,如果我将其配置为与数据库中的最大连接数匹配,则线程是否需要等待直到有空闲连接?文档不是很清楚(至少对我来说不是)。

任何指导表示赞赏!


问题答案:

抛开应用程序在何处运行以及数据库是否暴露在互联网上的问题,我认为添加连接池不会解决您的问题,但可以改善您的应用程序。

我猜想在使用数据库连接时会发生虚假错误。我无法识别您的特定错误,但这听起来像是某种连接失败,如果您与数据库之间的链接不可靠或速度较慢,则可能会发生这种情况。该池在这里无济于事,因为它是一个连接池。一旦获得连接,由于相同的原因,您将不知道连接是否会失败。

但是,如果您使用池,则不必长时间保持连接打开状态。对于池,您要求建立连接,如果没有连接,则会创建一个。返回连接后,如果一段时间未使用,则可能会断开连接并进行处置。除非您的应用程序在每个连接中都保持不变,否则这对您的应用程序和服务器都是有益的。

即使在这里,您也必须做一些额外的事情来处理故障。假设您从池中建立了连接,但随后失败了。您可以关闭它,然后向池中请求新的连接(池中应该有一些API可以摆脱该连接。)新连接可能处于更好的状态。

最后,考虑不要在Internet上使用JDBC。正如其他人可能指出的那样,这使自己面临不必要的风险。也许使用某种Web服务通过安全的https和更受限制的接口读取和写入数据。



 类似资料:
  • 我正在使用多个线程在不同的表中插入插入记录。此外,我正在使用批处理的记录插入,以提高效率。 注意:要插入的记录数以百万为单位。 我的问题是,在这种多线程环境中,我应该使用连接池吗? 我关心的问题: 每个线程将运行相当长的时间来执行数据库操作。所以,如果我的连接池的大小是2,线程的数量是4,那么在给定的时刻只有2个线程将运行。因此,其他两个线程将会在很长一段时间内保持理想状态以获得连接,因为针对百万

  • 我对连接池的理解是;如果connectionstring完全相同,那么我们重用该连接,而不是建立新的连接。 我的问题是,我正在为并行处理创建许多线程。在这个“虚拟”程序中,我创建了500个线程,并让线程池函数处理这些线程。 步骤是: > < li> 每个线程在SQL中创建一个更新表。(说明更新的时间戳) 然后线程Hibernate1到10秒(随机)。 最后,线程在 SQL 中进行另一次更新(说明结

  • 我有一个Spring Boot 1.5应用程序与Spring Batch 3.0.7和Java8。我最近收到了一些连接超时,当一个计划作业试图从5个线程开始时,而另一个长时间运行的批处理作业正在运行。似乎有15个线程合并的连接争用。我没有找到任何留档、博客或问题,似乎解决了Spring Batch中线程和池的相关性。 我使用HikariCP有3个连接,每个数据源配置为默认值(10个连接): bat

  • 主要内容:1 什么是Java 线程池,2 Java 线程池的优势,3 Java 线程池的应用场景,4 Java 线程池的例子1 什么是Java 线程池 Java线程池 表示一组正在等待作业并多次重复使用的工作线程。 如果是线程池,则会创建一组固定大小的线程。服务提供商从线程池中拉出一个线程并为其分配作业。作业完成后,线程再次包含在线程池中。 2 Java 线程池的优势 由于无需创建新线程,因此拥有更好的性能,可以节省时间。 3 Java 线程池的应用场景 在用户请求Servlet和JSP时,其中

  • 我不确定的是,在这种情况下,会创建多少个线程?我在一台2核心的机器上运行,所以每核心24个线程,最多48个线程? 当并行度因子设置为4.0时,可以并行运行的线程数将是8。那么,设置最小值和最大值(我的例子是24和48)的需要是什么?

  • 每个人我对使用线程池有一个误解。实际结果与该类的API描述不同。当我在线程池中使用时,它不重用线程,线程池等待构造函数中设置的KeepAliveTime,然后杀死这个线程并创建一个新线程。当我将KeepAliveTime设置为较小值时,比如1秒或更短,它会删除一个线程并重新创建它,但如果我设置一分钟,则不会创建新线程,因为不允许创建,队列已经满,所以所有任务都会被拒绝,但KeepAliveTime