CompletableFuture多线程,单线程并发,还是两者兼而有之?

lor*_*llo 5 java concurrency multithreading completable-future

我刚刚开始研究Java的CompletableFuture,并对这是否真正异步(即同时在一个线程上运行)或跨越多个线程(并行)有点困惑.

例如,假设我想要进行1000次不同的服务呼叫.进一步假设每个服务调用可以异步进行.使用CompletableFuture时,JVM是否会生成1000个单独的线程(假设JVM允许这么多线程),或者在一个线程中执行所有这些请求?或者是两者兼而有之?使用一些线程异步执行这些请求?

我想做的是这样的(在Python中):https: //pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html

有没有办法在Java中异步执行同一个线程上的多个请求/操作?

Kay*_*man 5

正如在javadoc中清楚解释的那样

所有没有显式Executor参数的异步方法都是使用ForkJoinPool.commonPool()执行的(除非它不支持至少两个并行级别,在这种情况下,创建一个新的Thread来运行每个任务).

因此,隐式或显式地使用池(好吧,除非你有一个核心机器,这些天很少见).我不建议创建一个包含1000个线程的池.

如果您只想对所有这些异步调用使用单个线程,则可以使用Executors.newSingleThreadExecutor()并将其作为参数传递(只需记住使用相同的执行程序).