在递归java方法中,每个方法都会在新堆栈中调用结果吗?

时间:2011-05-30 07:50:39

标签: java multithreading

据我所知,每个线程都有自己的堆栈,这是否意味着每个方法都有自己的线程?

2 个答案:

答案 0 :(得分:6)

不,每个方法在当前线程的堆栈中都有自己的堆栈 frame

因此,如果你有两个线程,一个调用method2()调用method2(),另一个调用methodA()调用methodB()调用methodC(),你最终会得到:

Stack 1                    Stack2

                           methodC()
method2()                  methodB()
method1()                  methodA()

请注意,还有tail recursion允许递归调用替换当前堆栈帧而不是创建新堆栈的可能性。

答案 1 :(得分:0)

我没有,这也是为什么在你的递归太深的情况下你可能得到StackOverflowError的原因。