Java线程安全中的executeUpdate方法

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

不,它不是线程安全的。

实际上,如果某个其他线程使用一个语句,然后另一个线程调用executeUpdate(),那么另一个线程的ResultSet (如果有的话)将被关闭。 用于java.sql.Statement的JavaDoc(其中PreparedStatement是子类型) “如果存在打开的对象,则Statement接口中的所有执行方法都会隐式关闭语句的当前ResultSet对象。”

此外,执行executeUpdate()的可能性不大可能是multithreading安全的。

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

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