如何使用多線程從數據庫中讀取數據,我在DB中有16個表,並且我想使用多線程並行讀取這些表中的數據。如何使用java中的多線程從數據庫中讀取數據
-4
A
回答
0
你有幾個選擇。
- 在每個線程中創建一個新的連接。
- 根據需要創建連接池並從線程獲取連接。
- 創建單個連接並在線程中使用之前創建一個
synchronize
。這不允許您「並行」讀取數據庫,但它允許您跨線程使用相同的連接。
0
創建一個分區器,它將您的所有數據集劃分爲單個線程處理的子組數。
創建單個任務並通過executorservice執行。
使用countdownlatch停止主線程,直到完成所有任務。
使用與threadpool大小相當的連接池。
public class Partitioner {
@Override
public Map<String, SomeDomainObject> partition(int size) {
Map<String, SomeDomainObject> result
= new HashMap<String, SomeDomainObject>();
int range = 10;//calculate your range depending on threadsize.
int fromId = 1;
int toId = range;
for (int i = 1; i <= size; i++) {
SomeDomainObject value = new SomeDomainObject();
value.setFromId(fromId);
value.setToId(toId);
value.setThreadName("Thread" + i);
result.put("partition" + i, value);
fromId = toId + 1;
toId += range;
}
return result;
}
0
這是創建我們如何使用2個線程和2個表格的例子。像明智一樣,您可以將其用於多個表格。
只需要一個連接就可以了,因爲我們只是從表中讀取表而不更新,插入或從表中刪除。
public class ClearPoppup implements Runnable {
Connection c;
private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/project";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "****";
public ClearPoppup() {
try {
Class.forName(DB_DRIVER);
c = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ClearPoppup impClass = new ClearPoppup();
Thread t1 = new Thread(impClass) {
public void run() {
Statement s;
try {
s = impClass.c.createStatement();
ResultSet rs = s.executeQuery("select * from user");
while (rs.next())
System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
Thread t2 = new Thread() {
public void run() {
Statement s;
try {
s = impClass.c.createStatement();
ResultSet rs = s.executeQuery("select * from userprofile");
while (rs.next())
System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t1.start();
t2.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
相關問題
- 1. 通過java中的多線程從數據庫中讀取
- 2. 在Java中使用多線程來讀取數據
- 3. Java和數據庫中的多線程
- 4. 如何插入數據庫使用java POI從Excel表中讀取數據?
- 5. 從多個線程讀取SQL數據
- 6. 從線程讀取數據(在Servlet中)
- 7. 使用POI讀取Java數據庫(CLOB列)中的Excel數據
- 8. MongoDB從數據庫中讀取數據
- 9. 從數據庫中讀取MVC數據
- 10. 從遠程數據庫讀取數據
- 11. Java:從過程中讀取元數據
- 12. 使用多線程程序通過Java從數據庫讀取大量數據集
- 13. 從sqlite3遠程數據庫中讀取
- 14. 使用USB數據線從我的應用程序的sqlite數據庫中讀取數據
- 15. 使用java從mysql數據庫讀取數據
- 16. 如何使用Poco C++庫從數據庫中讀取「日期」
- 17. 在Android應用程序中從Sqlite數據庫讀取數據。
- 18. 如何從Android上的數據庫中讀取數據?
- 19. 從數據庫中取多次使用
- 20. 從數據庫中讀取數據的好處而不是從數據庫中讀取數據
- 21. 如何使用DAS從POSTGRESQL數據庫讀取數據?
- 22. SQL使用數據讀取器從數據庫問題讀取
- 23. 讀取java中的XML數據庫列
- 24. 如何從數據庫中獲取數據到Java的XML
- 25. 如何從SQLite數據庫中讀取數據?
- 26. 如何從數據庫中讀取數據
- 27. 如何從數據庫中讀取數據到PowerPoint幻燈片?
- 28. 如何從數據庫中讀取數據時,點擊
- 29. 如何從數據庫中讀取數據複選框
- 30. 如何從android數據庫sqlite中讀取數據?
讓每個線程打開自己的連接並執行獨立查詢。不過,我懷疑這是否會有很大幫助。性能很可能受I/O限制,所以您不應該期望它的N線程速度提高N倍。 – Jesper
這個問題是**的方式**廣泛。整本書都是關於這些主題的。做一些*真實*研究,歡迎您回來*真實*特定的問題。 – GhostCat