我有一個運行一些多線程進程的應用程序。
在每個線程中,我與我的mysql數據庫共享相同的連接,它存儲了要運行的線程的重要信息。java多線程和mysql
通常當多線程時,我必須檢查同步,所以我想同時共享相同的資源,但是我必須對mysql執行相同的操作嗎?
我使用innodb在使用它時鎖定行,我不知道是否需要在我的代碼中查看它的訪問權限。
根據我的理解,如果我做或不做,並不重要,因爲它自己管理它的連接的服務器,但我不知道。
我有一個運行一些多線程進程的應用程序。
在每個線程中,我與我的mysql數據庫共享相同的連接,它存儲了要運行的線程的重要信息。java多線程和mysql
通常當多線程時,我必須檢查同步,所以我想同時共享相同的資源,但是我必須對mysql執行相同的操作嗎?
我使用innodb在使用它時鎖定行,我不知道是否需要在我的代碼中查看它的訪問權限。
根據我的理解,如果我做或不做,並不重要,因爲它自己管理它的連接的服務器,但我不知道。
Connection
在java中不保證是線程安全的。
除此之外,Mysql(特別是innodb)可以安全地處理多個連接。
在對您的評論問題(由EmilVikström提供)中,解決方案針對您的問題提出;
(編輯),我引述如下:
您檢查出的處理這一主題已經多的問題呢?例如:Java Threads and MySQL和Is MySQL Connector/JDBC thread safe? - EmilVikström
我已經實際上確實已經讀過這些問題,但正如你所說的,在邏輯上我不明白當使用連接到共享的innodb時會發生什麼問題。如果我使用線程之間的共享簡單連接,我應該同步它們嗎?或者mysql知道如何單獨使用它們.. –
我沒有自己嘗試過,但使用1個連接對象的2個或更多線程可能會給出未定義的結果。這是由於底層的實現可能會維持實際的連接狀態(socket,resultSets等)。最佳做法是使用連接池,每個線程1個連接或同步連接使用率。所以對於你的問題,是的 - 你應該同步共享連接。 – henryabra
沒有打開每個線程的新連接可能超載的MySQL服務器? –
您是否已檢出處理此主題的多個問題之一?例如:http://stackoverflow.com/questions/2167819/java-threads-and-mysql和http://stackoverflow.com/questions/1209693/is-mysql-connector-jdbc-thread-safe –