当您在其中调用另一个方法时,方法的执行流程是否等待?
Does the execution flow of a method wait when you call another method within it?
假设您在 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()
没有 return 任何东西。
大多数语言中的默认语义,尤其是Java中的语义当然是代码按顺序执行。
意思:除非你做了额外的事情,比如提交一个任务到一个ExecutorService(或者创建一个Thread对象并调用它的start()
方法),那么当然一个外部方法会依次执行所有调用,每个内部调用都需要在下一个执行之前完成。
换句话说:除非您在源代码中使用特定的结构,否则事情将由单个线程按照您在代码中输入的确切顺序执行。是的,事情可能会变得更复杂,因为指令可以在不同级别重新排序,但 Java 内存模型的这些方面与此处提出的基本问题无关。
它将等到 doSomeWork
完成。
如果你想异步调用doSomeWork
并且startWork
的下一个过程不依赖于doSomeWork
的结果,你可以使用一些并发框架,例如, Executor。
假设您在 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()
没有 return 任何东西。
大多数语言中的默认语义,尤其是Java中的语义当然是代码按顺序执行。
意思:除非你做了额外的事情,比如提交一个任务到一个ExecutorService(或者创建一个Thread对象并调用它的start()
方法),那么当然一个外部方法会依次执行所有调用,每个内部调用都需要在下一个执行之前完成。
换句话说:除非您在源代码中使用特定的结构,否则事情将由单个线程按照您在代码中输入的确切顺序执行。是的,事情可能会变得更复杂,因为指令可以在不同级别重新排序,但 Java 内存模型的这些方面与此处提出的基本问题无关。
它将等到 doSomeWork
完成。
如果你想异步调用doSomeWork
并且startWork
的下一个过程不依赖于doSomeWork
的结果,你可以使用一些并发框架,例如, Executor。