2012-05-16 75 views
2

我有一個運行一些多線程進程的應用程序。
在每個線程中,我與我的mysql數據庫共享相同的連接,它存儲了要運行的線程的重要信息。java多線程和mysql

通常當多線程時,我必須檢查同步,所以我想同時共享相同的資源,但是我必須對mysql執行相同的操作嗎?

我使用innodb在使用它時鎖定行,我不知道是否需要在我的代碼中查看它的訪問權限。

根據我的理解,如果我做或不做,並不重要,因爲它自己管理它的連接的服務器,但我不知道。

+4

您是否已檢出處理此主題的多個問題之一?例如:http://stackoverflow.com/questions/2167819/java-threads-and-mysql和http://stackoverflow.com/questions/1209693/is-mysql-connector-jdbc-thread-safe –

回答

1

Connection在java中不保證是線程安全的。

除此之外,Mysql(特別是innodb)可以安全地處理多個連接。

在對您的評論問題(由EmilVikström提供)中,解決方案針對您的問題提出;

(編輯),我引述如下:

您檢查出的處理這一主題已經多的問題呢?例如:Java Threads and MySQLIs MySQL Connector/JDBC thread safe? - EmilVikström

+0

我已經實際上確實已經讀過這些問題,但正如你所說的,在邏輯上我不明白當使用連接到共享的innodb時會發生什麼問題。如果我使用線程之間的共享簡單連接,我應該同步它們嗎?或者mysql知道如何單獨使用它們.. –

+0

我沒有自己嘗試過,但使用1個連接對象的2個或更多線程可能會給出未定義的結果。這是由於底層的實現可能會維持實際的連接狀態(socket,resultSets等)。最佳做法是使用連接池,每個線程1個連接或同步連接使用率。所以對於你的問題,是的 - 你應該同步共享連接。 – henryabra

+0

沒有打開每個線程的新連接可能超載的MySQL服務器? –