【发布时间】:2020-01-21 08:21:11
【问题描述】:
假设我有一个代码:
public static int process(customObject obj){
// some process and then return some count
return obj.getCount();
}
如果来自两个不同类的两个方法同时调用process 方法。
在这种情况下 java 将如何管理调用堆栈?
-
process是否只有一个调用堆栈,调用方法将共享此堆栈? -
process是否有两个调用堆栈,调用方法会有自己的堆栈副本?
如果case-1,java如何知道它应该返回哪个调用方法的结果(这种行为在多线程环境中会如何变化)?
注意:CustomObject 是一个父类型,它可以有多个实现的类型。
【问题讨论】:
-
每个线程都有自己的堆栈。你需要确保你的代码是线程安全的,如果它被多个线程使用。
static与这些都无关。 -
您上次的编辑毫无意义。您首先要讨论同时调用一个方法。因此,您处于多线程环境中。一个线程不能“同时”做一件以上的事情。
-
你在当前表单中的静态方法无论如何都不会在堆栈上存储任何东西。
-
添加到@Thilo 的评论中,如果您声明原语和对象分配,它们将被跨线程复制,但对象将存储在堆中(因此不会重复)
-
static在这里真的没有什么不同。唯一的区别是static方法中没有this(但您在这里没有使用它)。customObject的类型也无所谓,真的。
标签: java memory static-methods callstack