Выполнить поток 2 только после завершения потока 1 - PullRequest
0 голосов
/ 07 апреля 2019

Даст ли какой-либо из следующих фрагментов кода гарантию того, что 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 я обрабатываю изображения в одном потоке и загружаю их в несколько потоков.

1 Ответ

0 голосов
/ 07 апреля 2019

A CountDownLatch обычно полезен, если вы хотите дождаться завершения одной или нескольких задач перед запуском другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...