Приостановка выполнения до завершения writeStringToFile

У меня есть строка, которая записывает строку в файл с помощью Apache Commons io:

FileUtils.writeStringToFile(f, doc.outerHtml(), "UTF-8", false);

Я считаю, что выполнение продолжается даже до того, как файл будет полностью записан.

Я не хочу, чтобы выполнение продолжалось до тех пор, пока этот файл не был записан. Есть ли способ сделать это?

ОБНОВИТЬ

Нравится?

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class WriteFile implements Runnable {
private CountDownLatch latch;

public WriteFile(CountDownLatch latch) {
    this.latch = latch;
}

public void run() {
    System.out.println("Started.");
    // Do something - in this case write to file
    FileUtils.writeStringToFile(f, doc.outerHtml(), "UTF-8", false);
    latch.countDown();
}

Затем в родительском коде:

CountDownLatch latch = new CountDownLatch(1);
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(new WriteFile(latch));

    try {
        latch.await();  // wait until latch counted down to 0
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("Completed.");

Этот метод вызывает вызов блокировка? Что говорится в API?

Hovercraft Full Of Eels 14.09.2018 00:39

Используйте второй поток, используйте его для вызова FileUtils.writeStringToFile. Используйте Semaphore или CountDownLatch или блокировку монитора для управления потоком между двумя потоками.

MadProgrammer 14.09.2018 00:39

@MadProgrammer Спасибо. Это концепции, которые я раньше не использовал. У вас есть ссылка на пример?

Al Grant 14.09.2018 00:41

@AlGrant Параллелизм в Java - я бы также протестировал вызов, так как большинство операций записи уже блокируются

MadProgrammer 14.09.2018 00:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
90
0

Другие вопросы по теме