java - 在多线程应用程序中使用多个语句对象

标签 java mysql multithreading jdbc

我正在开发一个多线程应用程序,其中需要不同的线程来同时更新数据库。因此,我在创建它时向每个线程传递了一个新的语句对象(如果我发送单个对象,则避免锁定)。我的疑问是:

  1. 从单个 jdbc 连接中获取的语句对象的数量是否有限制?如果我创建了太多语句对象,数据库连接会失败吗?

  2. 如果我在线程结束前正确关闭语句,一次可以产生多少线程(在具有 512Mb RAM 的系统上)?

  3. 驱动程序不会在保持数据一致的同时更新数据库,无论我使用多少语句对象来并行更新数据库?我用的是mysql。

最佳答案

  1. 实际上,您能够创建的语句对象的数量应该足以满足您的需要。再说一次,在您的案例中,“太多”是多少?
  2. 可创建的线程数取决于很多因素。请注意,您创建的这些线程将是“操作系统级”线程,而不是真正的线程(假设您有一个双核系统,这将使它成为 2 个硬件线程,如果超线程可用则为 4 个) .在这里对您进行分析非常重要,以确定在您的系统减速到爬行之前可以创建多少线程。
  3. 这取决于数据库使用的锁定机制。你的目标是什么;高完整性还是高性能?阅读this .

IMO,您最好从每个线程的连接池中查找 Connection 对象,而不是尝试传递“语句”对象。

关于java - 在多线程应用程序中使用多个语句对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623659/

相关文章:

objective-c - 性能测试 : sem_t v. s。 dispatch_semaphore_t 和 pthread_once_t 对比dispatch_once_t

java - SavingsAccount 构造函数

mysql - Access mysql 使用所选行获取相邻记录?

mysql - Scala Spark 发现单元类型不匹配,需要 rdd.RDD

c++ - 究竟什么时候初始化在全局范围内声明的 thread_local 变量?

multithreading - 纯 Haskell 代码是否需要线程池?

JavaFX 按钮设置图像

java - 将请求从一个 WSDL 发送到另一个 WSDL

java - JProfiler:无法检测远程 JVM

mysql - 按最近日期的 ID 排序结果