Убедитесь, что код в обратном вызове CompletableFuture выполняется после - PullRequest
0 голосов
/ 06 февраля 2019

Скажите, у меня есть это:

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

Есть ли гарантия, что doSomethingB ();всегда будет выполняться до doSomethingA () ;?Что-то подсказывает мне с вытеснением потока , возможно, хотя и маловероятно, что doSomethingA () может быть запущен первым?

1 Ответ

0 голосов
/ 07 февраля 2019

Нет, на машине с несколькими процессорами нет гарантии, что doSomethingB () будет всегда выполняться перед doSomethingA ().Хотя, скорее всего, это произойдет в 99,999999999% случаев.

Я заметил в некоторых ваших комментариях ссылку на "Event Loop".В Java нет нативной концепции Event Loop, как, например, в Node и Javascript.Если у вас есть 4 потока с четырьмя процессорами и вы отправляете четыре задачи, все четыре задачи будут выполняться параллельно.

...