您必须从两台计算机驱动器中找到一个文件。如果一个线程首先找到它,那么第二个线程将停止。
答案 0 :(得分:1)
让所有线程定期检查一个标志变量,看它是否已经设置,然后停止搜索是否有。您可以在每个文件之后,每个目录之后,或者自上次检查后超过一秒钟时检查,根据您的需要,机制由您决定。
如果找到该文件,那么只需要一个 set 的标志。其他线程很快就会接收并停止。
我更喜欢让每个线程负责自己的资源,包括它的生命周期,这就是为什么我更喜欢这种解决方案来尝试从外部杀死一个线程。
我知道 Java是否遇到与pthreads相同的问题(在破坏拥有关键资源的线程方面)但我宁愿安全而不是抱歉。
答案 1 :(得分:1)
首先,你不能强制线程在java中停止。为了安全地停止thrad,它必须自然地终止"#34;。 (意思是,必须执行内部的所有代码或发生不是警告的异常)。
在Java中,您可以使用"中断"旗。让两个线程检查Thread.currentThread()。isInterrupted(),如下所示:
try {
while(!Thread.currentThread().isInterrupted()) {
[...]
Thread.sleep(); //May be you need to sleep here for a short period to not produce to much load on your system, ?
}
} catch (InterruptedException consumed) {
}
所以easiet实现是让你的两个线程互相引用,如果一个线程找到了它在另一个线程上调用中断的文件,由于上面的while循环,它会终止。
有关更多信息,请参阅实践中的Java Concurrency。
答案 2 :(得分:0)
您可以尝试使用标记是否找到该文件。如果标志改变其状态,线程将退出。
实施Runnable的示例
public class Finder implements Runnable {
private static boolean found = false;
@Override
public void run() {
for (ITERATE_THROUG_FILES) {
if (found) {
break;
}
if (FILE == SEARCHED_FILE) {
found = true;
}
}
}
}