CompletableFuture是否保证运行新线程?

给定一些任意的上下文(例如 Junit 单元测试,而不是特定的,不一定是“主”线程)。

像这样的代码必须引入至少 2 个线程吗?

public static void main (String[] args)
{
    CompletableFuture<Void> s = new CompletableFuture<>();
    CompletableFuture<Void> f = new CompletableFuture<>();
    
    CompletableFuture<Void> someContext =  CompletableFuture.supplyAsync(() ->
    {
        try{    
          System.out.println(Thread.currentThread().getId());
          CompletableFuture<String> update =
          CompletableFuture.supplyAsync(
            () -> {
              String ans = null;
              try {
                System.out.println(Thread.currentThread().getId());
                ans = "Hello";
              } catch (Exception e) {
                ans = e.toString();
              } finally {
                s.complete(null);
                return ans;
              }
            });
          s.get();
          System.out.println(s.isDone());
        } catch (Exception e) {
            System.out.println("Some error");
            return null;
        }
        return null;
    });
    
    System.out.println(f.isDone());
}

当我们进入时s.get()someContextJVM 能否检测到它正在等待 -> 上下文切换以update完成它,然后切换回someContext?

在ideone 中运行它时,它始终在两个不同的线程中运行它们,但这只是单一观察。

我想了解语言/运行时提供的保证。

以上是CompletableFuture是否保证运行新线程?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>