我有多个线程试图更新MySQL数据库?是使用线程安全的executeUpdate方法吗?
答案 0 :(得分:3)
不,使用它不是线程安全的。
实际上,如果某个其他线程使用一个语句,然后另一个线程调用executeUpdate(),那么另一个线程的ResultSet
(如果有的话)将被关闭。 JavaDoc for java.sql.Statement (of which PreparedStatement is a subtype)“Statement接口中的所有执行方法都会隐式关闭一个语句的当前ResultSet对象(如果存在开放的对象)。”
此外,executeUpdate()
的给定实现不太可能被编写为多线程安全。
你应该同步所有语句和结果集的使用,或者建立多个连接,以便每个线程使用自己的JDBC Connection
到数据库..我会推荐后者。
答案 1 :(得分:0)
考虑使用synchronized关键字创建更新方法,并考虑那里的并发线程死锁