【问题标题】:Is executeUpdate method in Java thread-safeJava 中的 executeUpdate 方法是线程安全的吗
【发布时间】:2012-02-08 08:03:58
【问题描述】:

我有多个线程试图更新 MySQL 数据库?使用 executeUpdate 方法是线程安全的吗?

【问题讨论】:

  • 如果你有多个线程,你应该使用多个连接。就这么简单。
  • 除了担心线程安全之外,可能还需要考虑并发数据库访问(事务)。

标签: java multithreading jdbc


【解决方案1】:

不,使用它不是线程安全的。

实际上,如果某个其他线程使用了一个语句,然后另一个线程调用了executeUpdate(),那么其他线程的ResultSets,如果有的话,就会被关闭。 JavaDoc for java.sql.Statement (of which PreparedStatement is a subtype) "Statement 接口中的所有执行方法都会隐式关闭一个语句的当前 ResultSet 对象,如果存在打开的对象。"

此外,executeUpdate() 的给定实现不太可能被编写为多线程安全的。

您应该同步所有使用的语句和结果集,或者建立多个连接,以便每个线程使用自己的 JDBC Connection 到数据库。我推荐后者。

【讨论】:

    【解决方案2】:

    考虑使用 synchronized 关键字创建更新方法,并考虑那里的并发线程死锁

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-04
      • 2014-08-21
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多