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