Java 如何停止包含阻塞操作的线程?

Java 如何停止包含阻塞操作的线程?,java,multithreading,loops,blocking,pcap4j,Java,Multithreading,Loops,Blocking,Pcap4j,我正在开发一个数据包嗅探器,但是我在停止包含阻塞方法的线程(没有不推荐的方法)方面遇到了麻烦 相关的方法是来自pcap4j库的loop()方法。因为这是一种阻塞方法,所以我将其放入一个线程中,以保持主线程的工作状态。但是,为了向pcap接口应用过滤器,我必须中断循环并重新启动它,因为库的breakloop()函数返回一个InterruptedException。所以我的想法是杀死包含该方法的线程。但是由于我无法进入导致方法阻塞的库循环,我无法通过检查线程是否被中断来完成 Thread t = n

我正在开发一个数据包嗅探器,但是我在停止包含阻塞方法的线程(没有不推荐的方法)方面遇到了麻烦

相关的方法是来自pcap4j库的
loop()
方法。因为这是一种阻塞方法,所以我将其放入一个线程中,以保持主线程的工作状态。但是,为了向pcap接口应用过滤器,我必须中断循环并重新启动它,因为库的
breakloop()
函数返回一个
InterruptedException
。所以我的想法是杀死包含该方法的线程。但是由于我无法进入导致方法阻塞的库循环,我无法通过检查线程是否被中断来完成

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        loop(args);
    }
});
t.start();
我怎样才能阻止它

编辑:我所做的是从库的源代码重新编译库,从PcapHandle类中删除InterruptedException。

使用可以获得所有线程。以及获取线程。找到线程后,可以中断它。
Thread.class
还有一些其他标识符,可能也有助于找到线程

编辑:您正在使用kaitoy/pcap4j吗?如果是这样的话,就不能对
InterruptedException
做任何事情,这就是库打算破坏它的方式。如果他们需要实现一个特性,我会考虑在他们的github中加入一个问题

import java.util.Set;

class TestStuff {

    public static void main(String[] args) {
        Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
        for (Thread thread : threadSet) {
            if(thread.getName().equals("some-name")){
                thread.interrupt();
            }
        }
    }
}

import java.util.Set;
类测试材料{
公共静态void main(字符串[]args){
Set threadSet=Thread.getAllStackTraces().keySet();
用于(螺纹:螺纹组){
if(thread.getName().equals(“某个名称”)){
thread.interrupt();
}
}
}
}

代码,您有完整的部分吗?整个包含类或到源代码的链接?现在不抱歉,但我想唯一有趣的部分在那里(我真的尝试了一切)。如果
线程#stop
没有被弃用,你能展示一些代码吗?另外,使用
breakLoop
有什么问题?如果
stop
没有被弃用,我会从主线程调用它,然后将筛选器应用于我的
pcaphandle
,并启动一个新线程。关于
breakloop
方法,它返回一个
InterruptedException
。我找到了一些我认为您正在使用的库,其中包含可用的API。如果我们看不到库或用例细节,我们就无法帮助您?任何时候都可以中断一个线程,这是抛出的唯一例外。谢谢,但问题是中断方法除了更改布尔线程之外没有其他效果。isInterrupted()在我的情况下是无用的。为什么不呢?抛出的异常就是为了这个?你试过了吗?现在我想知道我是否试过调用
中断
,然后调用
中断循环
(我承认这很荒谬),我明天会尝试(在法国的1h34),但谢谢你。我看到了你的编辑,我将在他们的github上发布这篇文章。非常感谢你的工作。