java - 仅在线程 1 完成后执行线程 2
问题描述
以下任何代码片段是否可以保证 pool1 仅在池完成执行后才会启动?
片段 1
ExecutorService pool = Executors.newFixedThreadPool(numberOfThreads);
for (FObject action : list) {
if (action instanceof FObject) {
Runnable run = new ImageProcessRunnable(action);
pool.execute(run);
}
}
pool.shutdown();
if (pool.awaitTermination(10, TimeUnit.SECONDS)) {
pool.shutdownNow();
}
ExecutorService pool1 = Executors.newFixedThreadPool(numberOfThreads);
synchronized (ImageHelper.getFilePaths()) {
for (String file :ImageHelper.getFilePaths()) {
pool1.execute(() -> {
UploadFileAsAppUser.uploadFileAsBoxAppUser(file, boxLocation);
});
}
}
pool1.shutdown();
if (pool1.awaitTermination(10, TimeUnit.SECONDS)) {
pool1.shutdownNow();
}
片段 2
for (FObject action : list) {
if (action instanceof FObject) {
ImageProcessor processor = new ImageProcessor();
}
}
ExecutorService pool1 = Executors.newFixedThreadPool(numberOfThreads);
synchronized (ImageHelper.getFilePaths()) {
for (String file :ImageHelper.getFilePaths()) {
pool1.execute(() -> {
UploadFileAsAppUser.uploadFileAsBoxAppUser(file, boxLocation);
});
}
}
pool1.shutdown();
if (pool1.awaitTermination(10, TimeUnit.SECONDS)) {
pool1.shutdownNow();
}
在片段 1 中,我在多个线程中处理和上传图像。在片段 2 中,我在单线程中处理图像并以多个线程上传它们。
解决方案
如果您想在开始另一个任务之前等待一个或多个任务完成,CountDownLatch通常很有用。
推荐阅读
- php - 如果子数组为空,PHP 删除数组
- vba - vba添加的数据包含超链接时Excel表格不自动展开
- c++ - 构造函数初始化列表 vs 在头文件中初始化
- tcl - 数组在命名空间过程中看不到,但在过程中没有命名空间
- java - 字符串范围内的 Java 整数
- ios - 将图像添加到具有三种尺寸的 xcode 时,图像看起来很模糊
- c# - 如何通过继承到 IHttpModule 来修改类中的请求
- angular - ng4-autocomplete 如何在 Angular 4 中使用它给我控制台错误
- javascript - Bootstrap Tooltip 动态值 取决于是否填写
- reactjs - 运行笑话测试时如何跳过 git check