Java线程安全中的executeUpdate方法
我有多个线程试图更新MySQL数据库? 是executeUpdate方法线程安全使用?
不,它不是线程安全的。
实际上,如果某个其他线程使用一个语句,然后另一个线程调用executeUpdate(),那么另一个线程的ResultSet
(如果有的话)将被关闭。 用于java.sql.Statement的JavaDoc(其中PreparedStatement是子类型) “如果存在打开的对象,则Statement接口中的所有执行方法都会隐式关闭语句的当前ResultSet对象。”
此外,执行executeUpdate()
的可能性不大可能是multithreading安全的。
您应该同步所有语句和结果集的使用,或者进行多个连接,以便每个线程使用自己的JDBC Connection
到数据库。我会推荐后者。
考虑使用synchronized关键字创建更新方法,并考虑那里的并发线程死锁