我在java中有一組線程,我想多次運行(每次都有一組不同的參數)。第二輪比賽開始,我想等待第一輪比賽結束。這應該與Thread.join()
輕鬆地完成第二輪之前,但因爲我的線程在一個無限循環中運行我有一箇中斷,這也中斷阻塞阻止他們加盟:如何等待一組線程'真的'在java中完成?
我有一個線程,其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();
}
我的問題是第二輪開始打印出來的信息,而第一個R un正在使用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
如何我真的能等到第一線組的完嗎?是否有更多選擇性的方式來中斷正在運行的線程?
[CyclicBarrier](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html) – 2014-12-02 09:20:00
如果一段代碼必須在另一位之後運行,爲什麼不使用一個線程? – Bathsheba 2014-12-02 09:23:03
因爲某些部分應該平行進行? OP使用* one *線程編排其他線程。 – aioobe 2014-12-02 09:27:26