groovy中的Join()不等待线程完成

时间:2017-03-04 00:12:51

标签: java multithreading groovy

我期待输出为:

testing
DONE! 6

但实际上是

DONE! 5

不是join()等待线程完成吗?

Thread[] T = new Thread[3];
int n = 5;
for(i = 0; i < 3; i++)
    T[i] = new Thread();
Thread x = new Thread();
T[1].start{
    sleep(500);
    log.info "testing";
}
x.start{
    n++;
}

x.join();
T[1].join();
log.info "DONE! " + n;

1 个答案:

答案 0 :(得分:1)

简短的回答是你没有开始线程(T[1]&amp; x)。

当你说T[1].start{..时,它并不意味着你正在创建T[1}线程,而是创建并启动匿名线程。

解决方案

T[1] = T[1].start{
    sleep(500);
    log.info "testing";
}

工作代码:

Thread[] T = new Thread[3];
int n = 5;
for(i = 0; i < 3; i++)
    T[i] = new Thread();
Thread x = new Thread();
T[1] = T[1].start{
    sleep(500);
    println "testing";
}
x= x.start{
    n++;
}

x.join();
T[1].join();
println "DONE! " + n;

查看details的文档: