说我有这个:

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


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

最佳答案

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

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

09-11 17:51