当您在其中调用另一个方法时,该方法的执行流程是否等待?

时间:2018-08-27 08:37:40

标签: java oop execution

假设您在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(),脚本将以相同的方法继续到下一行,还是等到{{ 1}}完成执行?

请注意,doSomeWork()不会返回任何内容。

2 个答案:

答案 0 :(得分:7)

大多数语言(尤其是在Java中)的 default 语义当然是顺序执行代码的。

含义:除非您做额外的操作,例如将任务提交到ExecutorService(或创建Thread对象并调用其function方法),然后当然是< / em>一个外部方法将按顺序执行所有调用,并且每个内部调用都需要在执行下一个调用之前完成。

换句话说:除非您在源代码中使用特定的构造,否则事情将由单个线程按照您放入代码的确切顺序执行。是的,事情会变得更加复杂,因为可以在各个级别对指令进行重新排序,但是Java内存模型的这些方面与此处提出的基本问题无关。

答案 1 :(得分:4)

它将等到doSomeWork完成。

如果您要异步调用doSomeWork,并且startWork的下一个过程不依赖于doSomeWork的结果,则可以使用一些并发框架,例如{ {3}}。