线程中的Java线程

时间:2018-07-05 08:33:50

标签: java multithreading threadpool executor

我有一个应用程序,可将标头和详细数据插入数据库表(2个表1用于标头信息,1个用于详细信息)。我当前的方法是在线程中平均分配细节。标头平均包含100,000个详细信息。

我想更改处理多个标头的方法。我将1标头的逻辑封装在一个函数中(此函数将包含多线程处理,以了解其详细信息),并在多个线程(标头的数量)或线程池(使用Executors)中调用此函数。

这是解决此问题的最佳方法,还是针对此问题的最佳实践?设置线程的优先级还会影响线程的流量吗? (我将为标题设置更高的优先级,并保留默认值作为详细信息)

1 个答案:

答案 0 :(得分:2)

考虑到您所描述问题的性质,该应用程序的主要瓶颈可能是数据库I / O。这应该首先解决。一些常见做法:

  • 考虑数据库事务的粒度:将多个细节插入分组到一个事务中,比一次插入一个细节(在自动提交模式下会发生)要获得更好的性能
  • 使用和调整数据库连接池,因此您可以让多个线程同时执行数据库操作,而又不会对数据库服务器造成过多负担。
  • 请记住,数据库操作主要是受I / O约束的,因此您可能使用的线程多于内核数。
  • 在适用时,请使用<>而不是创建自己的线程,因此您不必自己管理线程的生命周期