如何使用多线程从数据库中读取数据,我在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