java - 确保 CompletableFuture 回调中的代码在之后执行

标签 java concurrency vert.x preemption

假设我有这个:

public void foo(){
     CompletableFuture.delayedExecutor(1, TimeUnit.MILLISECONDS).execute(() -> {                 
         doSomethingA();                
      });       
      doSomethingB();        
}

是否有任何保证 doSomethingB();总是在 doSomethingA(); 之前运行有些东西告诉我,通过线程抢占,doSomethingA() 有可能(尽管不太可能)首先运行?

最佳答案

不,不能保证在具有多个处理器的计算机上,doSomethingB()总是先于 doSomethingA() 执行。尽管 99.999999999% 的情况下这种情况都会发生。

我注意到您的一些评论中提到了“事件循环”。在 Java 中,没有像 Node 和 Javascript 那样的原生事件循环概念。如果您有 4 个线程、四个处理器,并且您提交四个任务,则所有四个任务都将并行运行。

关于java - 确保 CompletableFuture 回调中的代码在之后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560757/

相关文章:

java - 多线程 Vert.x 每秒处理数千个连接

具有递归支持的 Java 正则表达式库

php - 如何增加 apache 进程或并发 php 文件的数量?

java - 用餐哲学家、Java 和监视器 : IllegalMonitorStateException

java - 在 Vert.x 应用程序中使用 Project Reactor

Java:获取两个列表之间的不同条目 Map<String, Object>

java - 遗失 Artifact net.sf.jung :jung2:jar:2. 0

java - 如何将 Future 转换为 Uni?

c - 如何查询多个 pthread(子线程)以了解哪一个线程终止

java - 如何使用postgres sql客户端获取vertx中插入记录的id