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

标签 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;

最佳答案

简短的回答是您没有启动线程(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;

检查文档中的 details :

关于java - groovy 中的 Join() 不等待线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590505/

相关文章:

Java多线程run()和start()的区别

java - 共享资源先到先得政策

eclipse - Eclipse-使用Spock和Groovy的新Gradle项目

elasticsearch - Elastic Search Groovy更新错误

java - 为什么 Pattern 不能匹配 "/*!"?

java - Intellij : Running a program fails, 返回一个完全独立的程序中包含的错误

java - 如何限制 JTextArea 只接受一组合法的字符?

java - 您如何思考和预测这样的线程问题的输出?

maven - Groovy 在 Codehaus 关闭后安装 HTTPBuilder?

java - Tomcat - 数据库连接池问题