2014-01-16 24 views
0

我使用多線程編寫JAVA程序, 我有超過5000個線程,每個線程訪問同一個表以插入或選擇數據(不更新)。使用JAVA在hsqldb中進行協同訪問線程

我在Hibernate/Spring中使用HSQLDB(文件模式)。

我使用多線程的原因是爲了減少執行時間,但表是當時由一個線程訪問的。

我配置hsqldb.tx=mvcc多版本控制,但任何變化 有人可以知道如何讓多個線程同時訪問同一個表?

+0

這是一個荒謬的數量的線程,你正在使用,它絕對不會做任何事情更快,相反。你也應該考慮一個真實的數據庫,我懷疑HSQLDB可以與MySQL或MariaDB等產品進行比較。 – Kayaman

+0

問題不在於線程數量,假設我的CPU有能力在當時運行多線程。問題在於,事實上我可以爲其他操作運行多個線程,我無法對數據庫訪問執行相同的操作。寫入和讀取事務鎖定數據文件。 – user3202518

+0

您的CPU可以同時在10個線程下運行。 5000線程是可以同時運行的數量的500倍以上,所以在線程之間的上下文切換時間浪費了很多。非常低效,你應該在嘗試這樣的事情之前閱讀多線程。 – Kayaman

回答

2

使用多個線程從表中SELECT可以提高性能,因爲線程可以同時訪問同一個數據庫表。

當多個線程對錶執行INSERT時,INSERT語句必須由數據庫一次執行一個,因爲可能存在必須在隊列中檢查以防止數據庫中存在不一致的PRIMARY KEY或UNIQUE約束。

在任何情況下,計算機都能夠同時運行多個CPU核心的線程。如果你有更多的線程,它們將被OS排隊。

相關問題