当前位置: 首页 > 知识库问答 >
问题:

使用ExecutorService线程的常量连接

巫马正卿
2023-03-14

我有一个任务来创建一个独立的java应用程序来做以下事情:

  1. 解析一个。csv文件。(这将有大约300万条记录)
  2. 对于每条记录,在几个DB表中插入约15行
  3. 如果出现错误,则输出。csv记录是否已成功处理

我目前的设计思路是:

  1. 读这本书。csv文件(这一步还没有考虑太多)

每个线程都有逻辑:

  1. 创建数据库连接
  2. if(getNextJobFromList()!=null)
    //在批更新中准备并插入语句
  3. 关闭数据库资源
  4. 给出输出状态

在这里,时间是一个非常大的制约因素。

现在的问题是:

>

  • 我可以使用执行器框架更快吗?在我的伪代码中,线程在其生命周期内保持数据库连接。我可以在执行器框架中做到这一点吗?

    还有其他方法可以优化吗?

    提前感谢:)


  • 共有1个答案

    桂高昂
    2023-03-14

    你可以用遗嘱执行人来做这件事。这听起来不是一个好主意,你会用大量的工作淹没数据库,你的大多数线程都会花时间等待。

    我认为你最好对数据库进行批量导入(如果你使用Oracle,使用SQL*加载器,其他数据库也有类似的工具),不需要多线程。批量复制速度非常快,它可以关闭约束检查和索引修改,只需要读取数据。它比JDBC快了几个数量级,如果你想要速度,你应该去看看。

     类似资料:
    • 问题内容: 我正在研究用于并行计算JavaSeis.org的软件开发框架。我需要一个强大的机制来报告线程异常。在开发过程中,了解异常来自何处具有很高的价值,因此我想在过度报告方面犯错。我还希望能够在线程中处理Junit4测试。下面的方法是合理的还是有更好的方法? 问题答案: 我不相信在使用时有标准的“钩子”来获取这些异常。但是,如果您需要支持(听起来很合理,假设您使用),则始终可以包装Callab

    • 假设我有一个Executors静态工厂方法的ExecutorService实例。 如果我从某个线程提交了一个调用,其中RetVal不是线程安全的本地实例化对象,那么当我从同一个线程获得()它时,我需要担心retvals的完整性吗?人们说局部变量是线程安全的,但我不确定当您返回一个本地实例化的对象并从其他线程接收它时,它是否适用。 下面是我的定制实现,我只是为了测试。您可以忽略EType枚举。

    • 在一个实用程序库中,我正在创建一个执行器服务 然后,主线程将向该服务发布一些任务。当主线程完成时,我想关闭Executor服务,以允许应用程序退出。 问题是我只能更改实用程序库中的代码。我考虑的一个选项是使用守护线程。但在发布到该服务的任务完成之前,它会突然关闭。

    • 问题内容: 假设我有一个利用该框架的应用程序 当我在调试器中运行此应用程序时,将使用以下(默认)名称创建一个线程:。如你所见,这并不是非常有用,而且据我所知,该框架没有提供一种简便的方法来命名已创建的线程或线程池。 那么,如何为线程/线程池提供名称呢?例如,。 问题答案: 你可以提供一个到。工厂将负责创建线程,并将能够为其命名。 引用Javadoc: 创建新线程 使用创建新线程。如果没有另外指定,

    • 即;每个可调用方调用progressBarUpdate(): 每个doSomeStuff()都有自己的异常处理,如果发生错误或抛出异常,则返回一个空值。这就是为什么返回类型是List,并且在这种情况下返回null的原因。调用项和它们返回的文件列表之间没有交叉,它们都维护自己的文件列表。 我发现它工作得很好,但偶尔会抛出窗体的InterruptedException: 我修改了代码,使条件nv>=m