我想从数据库读取异步数据并测量该读取时间。我正在使用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
,服务器已启动,但是我的客户端在几秒钟后(比同步快)可以看到数据。
有什么想法我该如何正确地衡量这次从DB读取异步数据的时间?