Java中的ExecutorService executor 等待所有线程结束
时间: 2023-08-05 21:32:52 浏览: 132
在Java中,ExecutorService提供了awaitTermination()方法来等待所有线程执行完成。该方法会阻塞当前线程,直到所有线程执行完成或者超时。下面是一个示例代码:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class WaitAllThreadsDemo {
private static ExecutorService executor = Executors.newFixedThreadPool(2);
public static void main(String[] args) throws InterruptedException {
executor.submit(new Runnable() {
@Override
public void run() {
System.out.println("Thread 1 started");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1 ended");
}
});
executor.submit(new Runnable() {
@Override
public void run() {
System.out.println("Thread 2 started");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2 ended");
}
});
executor.shutdown();
executor.awaitTermination(10, TimeUnit.SECONDS);
System.out.println("All threads ended");
}
}
```
在上面的示例代码中,我们创建了一个ExecutorService对象,并使用submit()方法提交了两个Runnable任务。然后,我们调用ExecutorService.shutdown()方法来关闭线程池,并使用ExecutorService.awaitTermination()方法来等待所有线程执行完成。我们设置了10秒的超时时间,如果超过该时间仍有线程没有执行完成,则会抛出InterruptedException异常。
需要注意的是,在使用ExecutorService等待所有线程执行完成时,要注意线程之间的同步问题,以避免出现线程安全问题。同时,也要注意设置合适的超时时间,以避免等待时间过长导致程序阻塞。
阅读全文