0

说我有这个:

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

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

4

1 回答 1

1

不,不能保证,在具有多个处理器的机器上,doSomethingB()总是在 doSomethingA() 之前执行。尽管它可能会在 99.999999999% 的时间发生。

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

于 2019-02-07T18:11:42.490 回答