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