为什么局部变量在 Java 中线程安全
2022-08-31 10:14:41
我正在阅读Java中的多线程,我遇到了这个
局部变量在 Java 中是线程安全的。
从那时起,我一直在思考如何/为什么局部变量是线程安全的。
有人可以让我知道。
我正在阅读Java中的多线程,我遇到了这个
局部变量在 Java 中是线程安全的。
从那时起,我一直在思考如何/为什么局部变量是线程安全的。
有人可以让我知道。
当您创建线程时,它将创建自己的堆栈。两个线程将有两个堆栈,一个线程从不与其他线程共享其堆栈。
程序中定义的所有局部变量都将在堆栈中分配内存(正如Jatin所评论的那样,这里的内存意味着对象的引用值和基元类型的值)(线程调用的每个方法都会在其自己的堆栈上创建一个堆栈帧)。一旦此线程完成方法执行,堆栈帧将被删除。
斯坦福大学教授在youtube上有很棒的演讲,这可能有助于你理解这个概念。
局部变量存储在每个线程自己的堆栈中。这意味着局部变量永远不会在线程之间共享。这也意味着所有局部基元变量都是线程安全的。
public void someMethod(){
long threadSafeInt = 0;
threadSafeInt++;
}
对对象的本地引用略有不同。引用本身不共享。但是,引用的对象并不存储在每个线程的本地堆栈中。所有对象都存储在共享堆中。如果在本地创建的对象从不转义创建它的方法,则该对象是线程安全的。事实上,你也可以将其传递给其他方法和对象,只要这些方法或对象都没有使传递的对象对其他线程可用。