如何在Java / Android中另一个线程启动之前等待线程完成? - java

假设我有这个非常简单的代码:

for(int i = 0; i < 10; i++) { 
    thread = new Thread(this); 
    thread.start(); 
} 

但是,在这段代码中,该线程显然一次启动了10次,并且它不会在上一个线程完成之前等待。在重新启动线程之前,如何检查线程是否完成?

参考方案

在回答您的问题之前,我强烈建议您研究 ExecutorServices ,例如 ThreadPoolExecutor

现在回答您的问题:

如果要等待上一个线程完成,请在开始下一个线程之前,在这之间添加thread.join():

for(int i = 0; i < 10; i++) { 
    thread = new Thread(this); 
    thread.start(); 

    thread.join();    // Wait for it to finish.
}

如果要启动10个线程,请让他们完成工作,然后继续,在循环后在它们上添加join:

Thread[] threads = new Thread[10];
for(int i = 0; i < threads.length; i++) { 
    threads[i] = new Thread(this); 
    threads[i].start(); 
}

// Wait for all of the threads to finish.
for (Thread thread : threads)
    thread.join();

如何在Java swing中对jComboBox元素进行排序? - java

如何将jComboBox元素列表排序为排序列表。JComboBox box=new JComboBox(); box.addItem("abc"); box.addItem("zzz"); box.addItem("ccc"); add(box); 我使用了许多jComboBox组件,但无法正常工作…

如何在Java 11(或更高版本)中启动单文件程序? - java

JEP 330描述了JDK 11中用于在Java中启动单文件程序的一项新功能。我试过了:$ ./Example.java但这不起作用。正确的用法是什么? 参考方案 精简版:$ java Example.java data.txt 或(使用#!):$ ./example data.txt 细节:工作示例here。考虑一个单文件程序来打印文件中的行:import…

如何在Java Web应用程序中将WordML转换为Office Open XML? - java

我有一个Java Web应用程序,该应用程序生成WordML格式的MS Word文档(Word 2003 XML格式的单个XML文件,扩展名为.xml)。我想将其自动转换为较新的Office Open XML格式,以便可以将文档另存为.docx文件(本质上是一个包含多个XML文件的zip文件)。这必须是完全自动化的,并且不能要求用户下载文件并手动转换。此外,…

如何在Java dom解析器中格式化xml? - java

<?xml version="1.0" encoding="UTF-8"?><Request> <Id> 在这里,第一个标签被写入文件,然后是xml版本,我需要在下一行中编写。像下面<?xml version="1.0" encoding="UTF…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …