这个问题不同于这个Java8 thenCompose and thenComposeAsync之间的区别,因为我想知道作者使用thenCompose而不是的原因是什么thenComposeAsync。
我正在阅读《现代 Java 实战》,在第 405 页上遇到了这部分代码:
public static List<String> findPrices(String product) {
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Shop> shops = Arrays.asList(new Shop(), new Shop());
List<CompletableFuture<String>> priceFutures = shops.stream()
.map(shop -> CompletableFuture.supplyAsync(() -> shop.getPrice(product), executor))
.map(future -> future.thenApply(Quote::parse))
.map(future -> future.thenCompose(quote ->
CompletableFuture.supplyAsync(() -> Discount.applyDiscount(quote), executor)))
.collect(toList());
return priceFutures.stream()
.map(CompletableFuture::join).collect(toList());
}
Run Code Online (Sandbox Code Playgroud)
一切正常,我可以理解这段代码,但这是作者为什么没有thenComposeAsync在第 408 页使用的原因,我无法理解:
通常,名称中没有 Async 后缀的方法在与前一个任务相同的线程中执行其任务,而以 Async 终止的方法总是将后续任务提交到线程池,因此每个任务都可以由不同的线程处理线。在这种情况下,第二个 CompletableFuture 的结果取决于第一个,因此无论您使用此方法的一个或另一个变体组合两个 CompletableFuture,对最终结果或其粗略计时都没有影响
根据我对thenCompose( 和thenComposeAsync) 签名的理解,如下所示:
public <U> …Run Code Online (Sandbox Code Playgroud) 我无法理解 Docker 中用户的概念。
这些是我的问题:
每个 Docker 容器都有自己的用户和组还是 Docker 容器使用主机用户管理?
--user我们传递给docker run命令的参数是什么?
Docker 容器或 Docker 守护进程是否可以在主机操作系统上创建用户?
Docker 卷中的所有权和文件权限如何工作?
对于第四个问题,假设我有以下卷:
--volume /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
并且主机操作系统中的ls和id命令的结果如下:
root@tashkhisi:/var/run# ls -l docker.sock
srw------- 1 root docker 0 Jul 30 18:44 docker.sock
root@novinhost:/var/run# id -u root
0
Run Code Online (Sandbox Code Playgroud)
这是否意味着我只能从 Docker 容器内使用 Docker 容器内 id 为 0 的用户访问该文件?
我的意思是容器看到该文件具有原始文件权限但有自己的用户?
请不要注意/var/run/docker.sock我只想知道权限如何工作的文件。
我只是使用它,因为它是一个常见的用例。