在不使用多线程 Java 的情况下停止以前的搜索

Stopping a previous search without using multithreading Java?

本文关键字:搜索 情况下 多线程 Java      更新时间:2023-09-26

我有一个允许用户输入搜索条件的网页。使用 get 方法提交搜索表单后,控制器类读取搜索参数,将它们设置为请求属性,然后定向回页面,然后调用具有数据库连接和 sql 查询的 java 类。我的问题是:当用户决定在当前搜索仍未完成的情况下执行新搜索时,有没有办法在开始新搜索之前终止服务器上的当前搜索。

你在这里真的没有提供很多信息。特别是你没有写如何连接到数据库。如果您使用的是 JDBC,则可以使用 Statement.cancel(( 取消执行查询。此外,还应在会话中的某个位置保存有关当前正在运行的查询的信息。

您需要interrupt()正在执行搜索的线程,并承认搜索线程在执行操作之间正在执行一些Thread.sleep()(最终您应该添加这些操作( - 线程将被您应该处理以中断搜索处理的InterruptedException中断。

不过,您需要将Thread.currentThread()保存在某个地方(即在会话中(,以便通过第二个引用检索引用。

这不是微不足道的,也不是很干净;因为你需要在搜索逻辑中放置一些中断点(即我之前提到的Thread.sleep()(并正确处理InterruptedException

当然,更简单的方法是忽略上一个线程仍在运行并执行新的搜索。