簡體   English   中英

在多線程應用程序中使用多個語句對象

[英]Using multiple statement objects in a multi-threaded application

我正在開發一個多線程應用程序,其中需要不同的線程來同時更新數據庫。 因此,我在創建它時向每個線程傳遞了一條新語句 object(以避免鎖定,如果我發送單個對象)。 我的疑問是:

  1. 可以從單個 jdbc 連接獲得的語句對象的數量是否有限制? 如果我創建了太多的語句對象,數據庫連接會失敗嗎?

  2. 如果我在線程消失之前正確關閉語句,一次可以產生多少線程(在具有 512Mb RAM 的系統上)?

  3. 無論我使用多少語句對象來並行更新數據庫,驅動程序不會在保持數據一致的同時更新數據庫嗎? 我使用 mysql。

  1. 實際上,您能夠創建的語句對象的數量應該足以滿足您的需要。 再說一次,在您的情況下“太多”是多少?
  2. 可以創建的線程數取決於很多因素。 請意識到您創建的這些線程將是“操作系統級”線程而不是真正的線程(假設您有一個雙核系統,這將使其成為 2 個硬件線程或 4 個如果超線程可用)。 分析您在這里將是最重要的,以確定在您的系統減速到爬行之前可以創建多少線程。
  3. 這將取決於數據庫使用的鎖定機制。 你的目標是什么; 高完整性還是高性能? 這個

IMO,您最好從每個線程中的連接池中查找 Connection 對象,而不是嘗試傳遞“語句”對象。

雖然我不是 java 程序員,但在多個線程之間共享單個連接是個壞主意。 當 2 個線程嘗試在同一個套接字上寫入時會發生什么? - 所以 - 每個線程必須有自己的數據庫連接

是的,如果許多線程同時寫入,數據庫中的數據應該是一致的——無論如何,你必須注意正確管理事務的代碼——當然,使用 InnoDB 作為 MySQL 的存儲引擎,因為 MyISAM不允許交易

  1. 這可能取決於 jdbc 的實現,但總的來說,幾乎所有東西都有限制。
  2. 誰知道。 在實踐中,可能有數千個。 但是,很多可能不會提高你的表現。
  3. 是的,您應該能夠跨多個線程共享 1 個連接,但是,許多 jdbc 實現在這種情況下表現不佳。 最好每個線程都有一個連接(對於一些合理數量的連接/線程)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM