有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何在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) 个答案