多线程如何在java中等待一组线程“真正”完成?
我有一组java线程,我想运行几次(每次都使用一组不同的参数)。第二次跑步开始时,我想等待第一次跑步结束。这应该在第二次运行之前通过Thread.join()
轻松完成,但由于我的线程在无限循环中运行,我必须通过中断来停止它们,这也会中断阻塞连接:
我有一个线程,其run()
方法基本上如下所示:
try {
while(true) {
printSomeInfo();
if (...) {
Thread.currentThread().getThreadGroup().interrupt();
}
}
} catch (InterruptedException e) {
Thread.currentThread().getThreadGroup().interrupt();
} finally {
printStats();
}
还有一个调用线程run方法的主方法:
System.out.println("New run:");
for (i ...) { //first run
myThread[i] = new MyThread(someInfoString1);
myThread[i].start();
}
try {
for (i...) {
myThread[i].join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("New run:");
for (i ...) { //second run
myThread[i] = new MyThread(someInfoString2);
myThread[i].start();
}
try {
for (i...) {
myThread[i].join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
我的问题是,第二次运行开始打印信息,而第一次运行没有使用finally块中的printStats()方法完成打印。 所以输出如下所示:
New run:
Info 1
Info 1
...
Info 1
New run:
(here comes the stack trace)
Info 2
Info 2
Stats 1 <- this should happen before the second "New run:"
...
Info 2
Stats 2
我怎样才能真正等待第一组线程完成呢?是否有更具选择性的方式来中断正在运行的线程
共 (0) 个答案