假设您在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()
不会返回任何内容。
答案 0 :(得分:7)
大多数语言(尤其是在Java中)的 default 语义当然是顺序执行代码的。
含义:除非您做额外的操作,例如将任务提交到ExecutorService(或创建Thread对象并调用其function
方法),然后当然是< / em>一个外部方法将按顺序执行所有调用,并且每个内部调用都需要在执行下一个调用之前完成。
换句话说:除非您在源代码中使用特定的构造,否则事情将由单个线程按照您放入代码的确切顺序执行。是的,事情会变得更加复杂,因为可以在各个级别对指令进行重新排序,但是Java内存模型的这些方面与此处提出的基本问题无关。
答案 1 :(得分:4)
它将等到doSomeWork
完成。
如果您要异步调用doSomeWork
,并且startWork
的下一个过程不依赖于doSomeWork
的结果,则可以使用一些并发框架,例如{ {3}}。