我正在阅读 Java 中的多线程,我遇到了这个
局部变量在 Java 中是线程安全的。
从那以后我一直在思考局部变量如何/为什么是线程安全的。
有人可以让我知道吗?
原文由 Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在阅读 Java 中的多线程,我遇到了这个
局部变量在 Java 中是线程安全的。
从那以后我一直在思考局部变量如何/为什么是线程安全的。
有人可以让我知道吗?
原文由 Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议
局部变量存储在每个线程自己的堆栈中。这意味着局部变量永远不会在线程之间共享。这也意味着所有本地原始变量都是线程安全的。
public void someMethod(){
long threadSafeInt = 0;
threadSafeInt++;
}
对对象的本地引用有点不同。引用本身不共享。然而,引用的对象并不存储在每个线程的本地堆栈中。所有对象都存储在共享堆中。如果在本地创建的对象永远不会逃脱创建它的方法,那么它就是线程安全的。事实上,您也可以将它传递给其他方法和对象,只要这些方法或对象都不会使传递的对象对其他线程可用
原文由 Renjith 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
当您创建一个线程时,它将创建自己的 调用堆栈。两个线程将有两个堆栈,一个线程从不与其他线程共享堆栈。
程序中定义的所有局部变量都将在堆栈中分配内存(正如 Jatin 评论的那样,这里的内存意味着对象的引用值和原始类型的值)(线程的每个方法调用都会在其自己的堆栈上创建一个堆栈帧)。一旦此线程完成方法执行,堆栈帧将被删除。
youtube 上有斯坦福大学教授的 精彩演讲,可以帮助您理解这个概念。