在我的应用程序中,多个线程试图将插入 MySQL 数据库。 executeUpdate 方法线程安全到使用?我该如何使用?
答案 0 :(得分:6)
虽然executeUpdate
方法本身可能是线程安全的,但预编译语句并非设计为同时使用。这是因为每个实例都存储您的参数,直到executeUpdate
指示它将参数发送到MySQL。此外,由于事务是通过Connection
对象进行管理的,因此在没有同步的情况下同时共享连接可能会在提交/回滚时给您带来不希望的行为。
为了使来自多个线程的插入同时工作,每个线程需要使用自己的Connection
,并创建自己的PreparedStatement
。在同一个数据库上并发使用多个预准备语句是线程安全的,因为并发是在RDBMS端管理的。
答案 1 :(得分:2)
Javadoc中没有任何内容表示Connection,
PreparedStatement,
或ResultSet
是线程安全的,因此他们的方法都不是。
答案 2 :(得分:0)
executeUpdate()
对于多个线程不是线程安全的。
您可以建立多个连接,以便每个线程使用自己的JDBC连接到数据库。