跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • [提问] 声明一个成员变量,在局部方法中初始化,是否有线程安全问题?
未分類
29 5 月 2020

[提问] 声明一个成员变量,在局部方法中初始化,是否有线程安全问题?

[提问] 声明一个成员变量,在局部方法中初始化,是否有线程安全问题?

資深大佬 : zhout 1

public class Demo {    Map<Object,Object> map;    public void foo(){     map = new HashMap<>();   } } 

大佬有話說 (15)

  • 主 資深大佬 : zhout

    额,补充一下,单机多线程的环境下。

  • 資深大佬 : zsl199512101234

    为啥要这样做呢

  • 資深大佬 : duwan

    跟在哪初始化有什么关系?又不是局部变量

  • 資深大佬 : Jacky23333

    不是很明白你的目的是什么,是要实现单例模式吗?如果是的话那当然是线程不安全的,你需要考虑多个线程同时调用这个方法会怎样

  • 資深大佬 : ho121

    有,如果 foo 被多个线程调用的话

  • 資深大佬 : duwan

    建议主再看看 JVM 内存模型。如果是局部变量会在栈里,没有线程问题。但是你这个 map 是在堆里面,多线程会有问题的

  • 資深大佬 : resist

    大胆写,哪有那么多线程

  • 資深大佬 : 0x1001

    @duwan 正解

  • 主 資深大佬 : zhout

    @duwan 疑惑是每次 new HashMap,重置了一下,还有安全问题嘛

  • 主 資深大佬 : zhout

    @zsl199512101234 看到同事代码里有这种骚操作,,,我正好也不太懂,所以发帖问问

  • 主 資深大佬 : zhout

    @Jacky23333 看到同事代码里有这种骚操作。。

  • 資深大佬 : ChanKc

    有

  • 資深大佬 : callofmx

    you

  • 資深大佬 : yeqizhang

    有线程安全问题,但不能说代码一定有问题,只是不好。你得看看实际使用情况,比如假如这是个单例 springmvc controller 那肯定不行,比如后续继续要使用 map 赋值,另外一个线程又把它变成 new Map

  • 主 資深大佬 : zhout

    @yeqizhang 赞,这个回答很完美

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具