【发布时间】:2020-06-14 06:46:21
【问题描述】:
我有一个程序可以从 HTML 文件中解析出一些数据,然后根据当前日期对这些文件进行一些计算。
由于文件的解析需要很多时间并且它们没有改变,所以我现在将数据存储在嵌入式 H2 数据库中,并且仅当该文件中的数据不在数据库中时才对其进行解析。否则我只是从数据库中查询它。还是初始解析,还有新文件的时候,都需要很多时间。
所以我现在正处于尝试多线程解析的地步。我想使用 ExecutorService 执行此操作并将文件拆分为多个任务(每个文件一个可能不是一个好主意,可能需要 10-20 个任务来使用所有内核)。现在我不知道,我应该如何实现数据库访问。我应该只有一个连接并为每个任务创建所需的 PreparedStatements,还是应该使用连接池(并且还为每个任务创建 PreparedStatements)或其他方式?
【问题讨论】:
-
一般来说,对于 JDBC,虽然连接应该是线程安全的,但最好不要同时使用来自多个线程的连接,因为它会引入竞争条件(例如,考虑一个线程时会发生什么提交,另一个回滚)。由于连接线程安全,各个操作可能会正常工作,但您预期的工作单元可能(或者更有可能)无法正常工作。
标签: java database multithreading jdbc h2