我写过类VideoProcessor,它对视频进行了一些重处理。如果“启动”,则会创建一个新线程,并将该参考保存在 videoProcessingThread的字段中。现在的问题是:调用线程上的中断(),但它永远不会中断
videoProcessingThread.interrupt();
这似乎没有任何作用,因为isInterrupted()永远不会计算为true。我也加了其他中断检查,只是为了确定;但他们也不“工作”。我已经实施了一种解决方法:
videoProcessingThread.kill();
这似乎实际上是“杀死”线程。方法kill将布尔变量 kill设置为true,并且正确计算并且线程返回。
videoProcessingThread = new Thread() {
boolean kill = false; // workaround
public void run() {
// init stuff
while (currentFrameIndex < totalFrames) {
if (isInterrupted()) {
System.out.println("isInterrupted");
return;
}
if (Thread.interrupted()) {
System.out.println("interrupted");
return;
}
if (Thread.currentThread().isInterrupted()) {
System.out.println("Thread.currentThread().isInterrupted()");
return;
}
if (kill) {
System.out.println("killed");
return;
}
}
// heavy processing
}
public void kill() {
kill = true;
}
}
我在做什么错?
您评论http://stackoverflow.com/questions/8627719/interrupt-doesnt-work? – ziesemer
是重处理(或称为那里的任何方法)捕获InterruptedException或检查中断标志? –
如何调用由匿名类声明的方法?换句话说,'videoProcessingThread'是Thread,它没有kill方法。你怎么称呼它?切线位,但只是好奇。 – erickson