Я хотел бы прочитать асинхронные данные из базы данных и измерить время этого чтения.Я использую CompletableFuture.runAsync
метод.
В моем приложении много классов, таких как:
public class ReadDataFromDB implements IInitialization {
@Override
public void init() throws ReadingException {
//delegate to other class which will read data from db
}
}
Инициализация - это функциональный интерфейс с одним методом public void init() throws ReadingException
Iсобрать все эти классы в список:
List<IInitialization> input = Arrays.asList(new ReadDataFromDB(), ...);
и запустить его асинхронно:
long l = input.stream().map(i -> CompletableFuture.runAsync(() -> {
try {
i.init();
} catch (ReadingException e) {
e.printStackTrace();
}
}, threadPool)).count();
Рабочий пул, который я определил как:
ExecutorService threadPool = Executors.newFixedThreadPool(10, r -> {
Thread thread = new Thread(r);
thread.setUncaughtExceptionHandler(null);
return thread;
});
Все это яесть в одном методе private void readDataAsync() throws ReadingException
Я пытаюсь измерить время следующим образом:
long begin = System.currentTimeMillis();
readDataAsync();
long end = System.currentTimeMillis();
System.out.println("readDataAsync: " + (end - begin) / 1000.0);
Этот способ не работает, потому что консоль показывает readDataAsync: 0.043
, сервер запущен, но мой клиент видитданные через несколько секунд (быстрее, чем синхронно).
Есть идеи, как правильно измерить это время чтения асинхронных данных из БД?