仅在线程1完成后执行线程2

问题描述 投票:0回答:1

以下任何代码片段是否可以保证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中,我正在处理单个线程中的图像并将它们上传到多个线程中。

java multithreading executorservice
1个回答
0
投票

如果您想在启动另一个任务之前等待一个或多个任务完成,那么CountDownLatch通常很有用。

© www.soinside.com 2019 - 2024. All rights reserved.