如何停止包含阻塞操作的线程?
How can I stop thread containing blocking operation?
我正在研究数据包嗅探器,但我遇到了有关停止包含阻塞方法的线程(没有弃用方法)的方法的问题。
相关方法是loop()
pcap4j 库中的方法。因为它是一种阻塞方法,所以我将它放入一个线程中以保持主要线程的工作。但是,为了将过滤器应用于 pcap 接口,我必须打破循环并重新启动它作为库 returns 和 InterruptedException
的 breakloop()
函数。所以我的想法是杀死包含该方法的线程。但是由于我无法进入导致方法阻塞的库循环,我无法通过检查线程是否被中断来做到这一点。
Thread t = new Thread(new Runnable() {
@Override
public void run() {
loop(args);
}
});
t.start();
我怎样才能阻止它?
EDIT :我所做的是从源代码重新编译库,从 PcapHandle class.
中删除 InterruptedException
同时使用 Thread#getAllStackTraces you can obtain all the threads. SO Has a few other answers to this 来控制线程。找到线程后,您可以中断它。 Thread.class
还有一些其他标识符也可能有助于找到线程。
编辑:您在使用 kaitoy/pcap4j 吗?如果是这样 breakLoop() 关于 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();
}
}
}
}
我正在研究数据包嗅探器,但我遇到了有关停止包含阻塞方法的线程(没有弃用方法)的方法的问题。
相关方法是loop()
pcap4j 库中的方法。因为它是一种阻塞方法,所以我将它放入一个线程中以保持主要线程的工作。但是,为了将过滤器应用于 pcap 接口,我必须打破循环并重新启动它作为库 returns 和 InterruptedException
的 breakloop()
函数。所以我的想法是杀死包含该方法的线程。但是由于我无法进入导致方法阻塞的库循环,我无法通过检查线程是否被中断来做到这一点。
Thread t = new Thread(new Runnable() {
@Override
public void run() {
loop(args);
}
});
t.start();
我怎样才能阻止它?
EDIT :我所做的是从源代码重新编译库,从 PcapHandle class.
中删除 InterruptedException同时使用 Thread#getAllStackTraces you can obtain all the threads. SO Has a few other answers to this 来控制线程。找到线程后,您可以中断它。 Thread.class
还有一些其他标识符也可能有助于找到线程。
编辑:您在使用 kaitoy/pcap4j 吗?如果是这样 breakLoop() 关于 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();
}
}
}
}