Как измерить время асинхронного чтения данных из базы данных - PullRequest
1 голос
/ 27 марта 2019

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

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

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