Java groovy中的Join()不';不要等待线程完成

Java groovy中的Join()不';不要等待线程完成,java,multithreading,groovy,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

我希望输出为:

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;
Thread[]T=新线程[3];
int n=5;
对于(i=0;i<3;i++)
T[i]=新线程();
线程x=新线程();
T[1]。开始{
睡眠(500);
log.info“测试”;
}
x、 开始{
n++;
}
x、 join();
T[1]。join();
log.info“完成!”+n;

简单的回答是你没有开始你的线程(
T[1]
&
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;
Thread[]T=新线程[3];
int n=5;
对于(i=0;i<3;i++)
T[i]=新线程();
线程x=新线程();
T[1]=T[1]。开始{
睡眠(500);
println“测试”;
}
x=x.开始{
n++;
}
x、 join();
T[1]。join();
println“完成!”+n;

检查文档:

你在深水中行走;)。我完成了
测试!6使用
Groovy版本:2.4.7 JVM:1.8.0\u 112供应商:Oracle公司OS:Mac OS X
很好,至少我知道这不是代码。我在SoapUI 5.2.1中使用Groovy