我正在编写一个需要从数据库写入和检索数据的应用程序。我想知道是否应该在线程/异步任务中运行查询,因为它需要不到 100 毫秒,事实上,一次调用通常需要大约 30-70 毫秒(包括解析游标)。此调用仅从 2 个(不同的)数据库中的每一个数据库中检索一行。如果我添加一个异步任务,时间会达到 120-170 毫秒(我从开销来看)。在如此短的时间内使用线程/异步任务是否值得(或更好的做法)?
最佳答案
您想要在单独的线程中运行数据库查询的原因是因为数据库是您无法完全控制的外部依赖项(在生产代码中)。这意味着,即使您的查询通常在 100 毫秒内顺利运行,但有时也会出现问题,您需要一种方法来处理查询根本不返回的情况。通过将此功能封装在单独的线程中,您可以更好地控制出现问题时发生的情况。例如,如果数据库出现问题,可以设置一个超时期限,在此之后您的代码可以假定发生了错误并重试或终止挂起的查询线程,而不会导致整个程序被阻塞并需要重新启动接着说。有多种技术可以实现我刚才所说的功能,因此我不能太具体,因为我不知道您的具体情况涉及什么以及可能需要进行哪些权衡。我认为我想要表达的总体观点是,我们为尝试而编写的代码与我们为投入生产而编写的代码之间存在很大差异。
编写可靠的多线程代码是一项艰苦的工作。我建议您花时间阅读并理解 Goetz 的书Java Concurrency in Practice,以帮助您解决并发问题。
关于java - 如果数据库查询低于 100 毫秒,我应该线程化吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670868/