【发布时间】:2015-03-05 20:05:05
【问题描述】:
我有一个 Java 应用程序,它读取包含 SQL 查询的 JSON 文件并使用 JDBC 在数据库上触发它们。
现在我有 5 万个这样的文件,我需要生成 5 万个独立线程来读取每个文件并将它们上传到数据库中。我需要在特定秒后的特定时间产生这些线程。例如当我应该生成这些线程时,我有以下排序登录详细信息的地图。登录详细信息以秒为单位,许多线程将在 0 秒、10 秒、50 秒等时产生
Map<String,Integer> loginMap = new HashMap<>(50000);
我正在使用 ScheduleExecutureService 来安排这些线程我有类似以下的内容
ScheduleExecutureService ses = Executors.newScheduledThreadPool(50000);
for(Map.Entry<String,Integer> entry : loginMap.entrySet()) {
Integer loginTime = (Integer) entry.getValue();
ses.schedule(new MyWorker(entry.getKey()),loginTime,TimeUnit.SECONDS);
}
上面的代码适用于几千个小文件,但它不能扩展到 5 万个,而且由于我的工作人员使用 JDBC 连接,数据库连接不足。
即使我在线程的 run 方法中获取连接。这些线程是否开始执行运行,即使它不应该运行?我是多线程新手。
【问题讨论】:
标签: java multithreading jdbc