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