【发布时间】:2019-09-02 16:08:15
【问题描述】:
我正在开发一个数据包嗅探器,但我在停止包含阻塞方法的线程(不推荐使用的方法)的方法上遇到了麻烦。
关注的方法是来自 pcap4j 库的loop() 之一。由于它是一种阻塞方法,因此我将其放入一个线程中以保持主线程正常工作。但是,为了对 pcap 接口应用过滤器,我必须中断循环并重新启动它,因为库的 breakloop() 函数返回 InterruptedException。所以我的想法是杀死包含该方法的线程。但是由于我无法进入导致方法阻塞的库循环,我无法通过检查线程是否被中断来做到这一点。
Thread t = new Thread(new Runnable() {
@Override
public void run() {
loop(args);
}
});
t.start();
我怎样才能阻止它?
编辑:我所做的是从源代码重新编译库,从 PcapHandle 类中删除 InterruptedException。
【问题讨论】:
-
代码,你有完整的部分吗?整个包含类或源链接?
-
现在不抱歉,但我猜唯一有趣的部分是那里(我真的尝试了一切)。
-
如果
Thread#stop未被弃用,您能否展示一些代码?另外,使用breakLoop有什么问题? -
如果
stop未被弃用,我会从主线程调用它,然后将过滤器应用到我的pcaphandle并启动一个新线程。关于breakloop方法,它返回一个InterruptedException。 -
我发现了一些我认为您正在使用的库,顺便说一下,它有 API 和可用的源代码。如果我们看不到库或用例细节,我们无法为您提供帮助?任何时候线程都可以被中断,这就是被抛出的异常。
标签: java multithreading loops blocking pcap4j