【问题标题】:Does the execution flow of a method wait when you call another method within it?当您在其中调用另一个方法时,方法的执行流程是否等待?
【发布时间】:2018-08-27 08:37:40
【问题描述】:

假设你在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() 方法中执行时,脚本会以相同的方法继续到下一行还是等到YourClass 中的doSomeWork() 完成执行?

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

【问题讨论】:

  • 它将等待。你做了一些研究吗?你试过执行你的代码吗?
  • 在单个执行线程中按顺序执行。
  • 就像把被调用方法的代码直接放到调用方法中一样。所以是的,它肯定会在继续调用方法之前完全执行。多线程时会出现不同的行为。
  • 非常感谢大家的投入。 @BackSlash 是的,我做了一些研究,但找不到像我刚到这里的那样明确的答案。我确实尝试执行代码,但它执行得非常快,我无法弄清楚它是否在等待。
  • 我很欣赏快速回归,虽然我同意,这是非常基本的东西;-)

标签: java oop execution


【解决方案1】:

在大多数语言中,尤其是在 Java 中,默认语义当然是代码按顺序执行。

意思:除非你做了额外的事情,比如提交一个任务到一个ExecutorService(或者创建一个Thread对象并调用它的start()方法),那么当然 一个外部方法会依次执行所有调用,每个内部调用都需要在下一个调用之前完成。

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

【讨论】:

    【解决方案2】:

    它将等到doSomeWork 完成。

    如果你想异步调用doSomeWork,并且startWork的下一个过程不依赖doSomeWork的结果,你可以使用一些并发框架,例如Executor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多