Ожидает ли поток выполнения метода, когда вы вызываете другой метод внутри него? - PullRequest
0 голосов
/ 27 августа 2018

Скажем, у вас есть следующий метод в MyClass

public class MyClas{
  public void startWork(){
    YourClass.doSomeWork();
    //more things to do in this method
  }
}

и YourClass выглядит так:

public class YourClass{
  public static void doSomeWork(){
    // a lot of work to do here
    // maybe even invoke other methods in some other classes
  }
}

Теперь меня интересует, когда код YourClass.doSomeWork(); выполняется в методе startWork(), продолжит ли сценарий переходить к следующей строке в том же методе или подождет, пока doSomeWork() в YourClass завершит свое выполнение?

Обратите внимание, что doSomeWork() ничего не возвращает.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Он будет ждать до завершения doSomeWork.

Если вы хотите вызвать doSomeWork асинхронно и следующая процедура startWork не зависит от результата doSomeWork, вы можете использоватьнекоторого параллельного фреймворка, например, Executor .

0 голосов
/ 27 августа 2018

Семантика по умолчанию в большинстве языков, и особенно в Java, конечно, заключается в том, что код выполняется последовательно.

Значение: если вы не выполните дополнительные вещи, такие как отправка задачи в ExecutorService (или создание объекта Thread и вызов его метода start()), тогда конечно an внешний метод выполнит все вызовы в последовательности, и каждый внутренний вызов должен завершиться до того, как будет выполнен следующий.

Другими словами: если вы не используете конкретные конструкции в своем исходном коде, вещи выполняются одним потоком в точном порядке, который вы поместили в свой код. И да, все может стать более сложным, поскольку инструкции могут быть переупорядочены на разных уровнях, но эти аспекты модели памяти Java не имеют отношения к основному вопросу, задаваемому здесь).

...