У меня есть строка, которая записывает строку в файл с помощью 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.");
Используйте второй поток, используйте его для вызова FileUtils.writeStringToFile. Используйте Semaphore или CountDownLatch или блокировку монитора для управления потоком между двумя потоками.
@MadProgrammer Спасибо. Это концепции, которые я раньше не использовал. У вас есть ссылка на пример?
@AlGrant Параллелизм в Java - я бы также протестировал вызов, так как большинство операций записи уже блокируются




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