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

时间:2019-02-06 18:59:48

标签: java concurrency vert.x preemption

说我有这个:

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

是否可以保证doSomethingB();将始终在doSomethingA();之前运行?有人通过线程抢占告诉我,虽然不太可能,但doSomethingA()可以首先运行?

1 个答案:

答案 0 :(得分:1)

不,不能保证在具有多个处理器的计算机上,doSomethingB()将始终在doSomethingA()之前执行 。虽然很可能会在99.999999999%的时间发生。

我在您的一些评论中注意到对“事件循环”的引用。在Java中,没有像Node和Javascript这样的事件循环本机概念。如果您有4个线程,4个处理器并提交了4个任务,则所有4个任务将并行运行。