Java 我可以在这里做Thread.stop()吗?

Java 我可以在这里做Thread.stop()吗?,java,multithreading,Java,Multithreading,我的程序中有这种类型和搜索功能 有一种搜索方法需要一些时间才能完成,并且应该在一个单独的线程上运行,当用户键入一个新的字母进行新的搜索时,我应该能够终止它,但问题是我使用的第三方trie实现不会检查中断,而且我到处都看到使用thread.stop会对我的搜索造成不良影响程序,所以我的问题是下面的代码可以使用线程吗?停止???或者如果有其他方法我可以做到这一点 ArrayList search(key) { Map m = patricaTrie.prefixMap(ke

我的程序中有这种类型和搜索功能

有一种搜索方法需要一些时间才能完成,并且应该在一个单独的线程上运行,当用户键入一个新的字母进行新的搜索时,我应该能够终止它,但问题是我使用的第三方trie实现不会检查中断,而且我到处都看到使用thread.stop会对我的搜索造成不良影响程序,所以我的问题是下面的代码可以使用线程吗?停止???或者如果有其他方法我可以做到这一点

 ArrayList search(key)
    {
        Map m = patricaTrie.prefixMap(key);  // 3rd party code cant be modified
        HashSet hs = new HashSet(m.size());
        ArrayList al = new ArrayList();
        for(Object t : collection)
        {
            if(!hs.contains(t))
            {
                al.add(t);
                hs.add(t);
            }
        }
        return al;
    }

在线程中使用信号处理来优雅地停止正在运行的线程。 例如:

您可以创建一个布尔字段并在运行中检查它:

    public class Task implements Runnable {

       private volatile boolean isRunning = true;

       public void run() {

         while (isRunning) {
             //do work
         }
       }

      // public void kill() {
      //  isRunning = false;
      // }

    }

现在,当您想要停止这个正在运行的线程时,只需设置isRunning=false标志;传递指示线程正常停止的信号。

在大多数情况下,杀死线程的唯一安全方法是对线程进行编码,使其能够接收停止信号。例如,使用一个名为shouldQuit的布尔变量,让线程定期检查该变量,如果该变量为true,则退出


当用户键入新字母以进行新搜索时,将此布尔值设置为true并退出run方法。

好的,Thread.stop不会损坏JVM,但是如果您没有正确处理代码,例如留下垃圾数据、留下损坏的实例等。。。,然后,代码的其他一些区域可能会出现问题,这些区域可能会引用已停止线程中使用的变量

例如,如果主线程在搜索之外引用线程中使用的任何变量、对象,则由于对象中存在损坏的数据,因此主线程可能会出现错误行为


因此,如果必须的话,建议您确保不要在线程中使用从外部停止的任何对象,然后有一种方法来确定该对象是否已损坏。

但此方法将始终运行到最后,这将占用大部分时间。patrictarie.prefixMapkey和quit变量在这里无法完成此工作?!为什么要创建一个变量而不是使用标准变量?i、 e.中断