接着上文,我们再深入探讨一下,虚拟机栈的线程安全问题。
3.方法内的局部变量是否线程安全? 我们再深入探讨一下这个问题。 我们再来看这段代码 StringBuilder是线程不安全的,我们来看看到底安不安全。 m1是线程安全的,因为它是局部变量。 m2是线程不安全的,因为它是外部传进来的对象,对象可能也被用作其他线程干其他事情。 m3是线程不安全的,局部变量逃离了方法的作用范围,和m2一样,返回的变量,同样有被其他线程引用的风险。 故而,要考虑其他线程可能引用这个变量时,我们需更改为StringBuffer 结论: 1.如果方法内局部变量没有逃离方法的作用范围,它是线程安全的 2.如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全
上一篇:10.jvm内存结构部分——栈的问题解析2___线程安全_tgbyhn31的博客-CSDN博客
下一篇:12.jvm内存结构部分——栈__内存溢出1_tgbyhn31的博客-CSDN博客