【发布时间】:2021-11-02 06:25:25
【问题描述】:
假设我有以下内部类,现在 method1() 被 2 个线程访问,比如线程 1 和线程 2,这里我们声明一个局部变量并递增它。 现在这个局部变量是原始数据类型并且将存在于堆栈中,因为每个线程都有自己的内存堆栈,它不应该在线程之间共享,但是 int local 也是静态内部类的一部分,所以我想知道int local 是否会在线程之间共享?
如果2个线程同时调用method1(),内存分配会怎样?
private static class SharedClass {
int a = 0;
public void method1() {
int local = 0;
local++;
a=local;
}
}
【问题讨论】:
-
int local不是SharedClass的成员。 -
所以如果我同时调用 SharedClass.method1() 2 次,两个线程将拥有自己的 int local 副本,对吗?
-
本质上是的。
-
但是,如果两个线程都在
SharedClass的同一个实例上调用method1,a可能是共享的。
标签: java multithreading stack static-classes