java - 如果数据库查询低于 100 毫秒,我应该线程化吗

标签 java android database performance android-asynctask

我正在编写一个需要从数据库写入和检索数据的应用程序。我想知道是否应该在线程/异步任务中运行查询,因为它需要不到 100 毫秒,事实上,一次调用通常需要大约 30-70 毫秒(包括解析游标)。此调用仅从 2 个(不同的)数据库中的每一个数据库中检索一行。如果我添加一个异步任务,时间会达到 120-170 毫秒(我从开销来看)。在如此短的时间内使用线程/异步任务是否值得(或更好的做法)?

最佳答案

您想要在单独的线程中运行数据库查询的原因是因为数据库是您无法完全控制的外部依赖项(在生产代码中)。这意味着,即使您的查询通常在 100 毫秒内顺利运行,但有时也会出现问题,您需要一种方法来处理查询根本不返回的情况。通过将此功能封装在单独的线程中,您可以更好地控制出现问题时发生的情况。例如,如果数据库出现问题,可以设置一个超时期限,在此之后您的代码可以假定发生了错误并重试或终止挂起的查询线程,而不会导致整个程序被阻塞并需要重新启动接着说。有多种技术可以实现我刚才所说的功能,因此我不能太具体,因为我不知道您的具体情况涉及什么以及可能需要进行哪些权衡。我认为我想要表达的总体观点是,我们为尝试而编写的代码与我们为投入生产而编写的代码之间存在很大差异。

编写可靠的多线程代码是一项艰苦的工作。我建议您花时间阅读并理解 Goetz 的书Java Concurrency in Practice,以帮助您解决并发问题。

关于java - 如果数据库查询低于 100 毫秒,我应该线程化吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670868/

相关文章:

Java- super 引用

java - 关于 ServerSocket,需要澄清

android - 错误 : use of undeclared identifier 'PTHREAD_MUTEX_ROBUST' cargo build liblmdb-sys for aarch64-linux-android target

java - 如何避免应用程序可能在其主线程上做太多工作

java - Hibernate 急切地获取需要很长时间

sql-server - Entity Framework 中缺少枚举列

java - 如何在Spring WebClient中拦截http流量?

java - MysqlDataSource 在 Glassfish 中抛出 ClassCastException

android - 如何将 materialButton 图标设置到中心

database - 我的特定用例使用哪个数据库