为什么局部变量在 Java 中是线程安全的

新手上路,请多包涵

我正在阅读 Java 中的多线程,我遇到了这个

局部变量在 Java 中是线程安全的。

从那以后我一直在思考局部变量如何/为什么是线程安全的。

有人可以让我知道吗?

原文由 Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 353
2 个回答

当您创建一个线程时,它将创建自己的 调用堆栈。两个线程将有两个堆栈,一个线程从不与其他线程共享堆栈。

程序中定义的所有局部变量都将在堆栈中分配内存(正如 Jatin 评论的那样,这里的内存意味着对象的引用值和原始类型的值)(线程的每个方法调用都会在其自己的堆栈上创建一个堆栈帧)。一旦此线程完成方法执行,堆栈帧将被删除。

youtube 上有斯坦福大学教授的 精彩演讲,可以帮助您理解这个概念。

原文由 kosa 发布,翻译遵循 CC BY-SA 4.0 许可协议

局部变量存储在每个线程自己的堆栈中。这意味着局部变量永远不会在线程之间共享。这也意味着所有本地原始变量都是线程安全的。

 public void someMethod(){

   long threadSafeInt = 0;

   threadSafeInt++;
}

对对象的本地引用有点不同。引用本身不共享。然而,引用的对象并不存储在每个线程的本地堆栈中。所有对象都存储在共享堆中。如果在本地创建的对象永远不会逃脱创建它的方法,那么它就是线程安全的。事实上,您也可以将它传递给其他方法和对象,只要这些方法或对象都不会使传递的对象对其他线程可用

原文由 Renjith 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题