Как измерить время асинхронного чтения данных из базы данных

#java #parallel-processing

#java #параллельная обработка

Вопрос:

Я хотел бы прочитать асинхронные данные из базы данных и измерить время этого чтения. Я использую 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

Я собираю все эти классы в список:

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

Есть идеи, как я могу правильно измерить это время чтения асинхронных данных из БД?