2012-01-11 78 views
1

我有多個線程試圖更新MySQL數據庫?是executeUpdate方法線程安全的使用?Java中的executeUpdate方法是線程安全的

+0

更多信息http://stackoverflow.com/questions/1272453/jdbc-fundamental-concepts-pooling-and-threading – 2012-01-11 23:32:10

+2

如果你有多個線程,你應該使用多個連接。就那麼簡單。 – bestsss 2012-01-11 23:34:10

+0

除了擔心線程安全之外,您還可能需要考慮併發數據庫訪問(事務)。 – 2012-01-12 00:19:47

回答

3

不,它不是線程安全的使用。實際上,如果其他線程使用語句,然後另一個線程調用executeUpdate(),那麼其他線程的ResultSet(如果有)將被關閉。 JavaDoc for java.sql.Statement (of which PreparedStatement is a subtype)「Statement接口中的所有執行方法隱式關閉一個陳述的當前ResultSet對象(如果存在打開的)。」

此外,executeUpdate()的給定實現不太可能寫成多線程安全的。

您應該同步所有對語句和結果集的使用,或者建立多個連接,以便每個線程都將自己的JDBC Connection用於數據庫..我會推薦後者。

+0

並使用連接池,但您已經知道這一點 – jbindel 2012-01-12 00:09:02

0

考慮對你的更新方法使用synchronized關鍵字,想想你的併發線程死鎖有