V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhout
V2EX  ›  Java

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

  •  
  •   zhout · May 29, 2020 · 3341 views
    This topic created in 2165 days ago, the information mentioned may be changed or developed.
    public class Demo {
    
      Map<Object,Object> map;
    
      public void foo(){
        map = new HashMap<>();
      }
    }
    
    15 replies    2020-06-01 10:59:25 +08:00
    zhout
        1
    zhout  
    OP
       May 29, 2020
    额,补充一下,单机多线程的环境下。
    zsl199512101234
        2
    zsl199512101234  
       May 29, 2020
    为啥要这样做呢
    duwan
        3
    duwan  
       May 29, 2020
    跟在哪初始化有什么关系?又不是局部变量
    Jacky23333
        4
    Jacky23333  
       May 29, 2020 via Android
    不是很明白你的目的是什么,是要实现单例模式吗?如果是的话那当然是线程不安全的,你需要考虑多个线程同时调用这个方法会怎样
    ho121
        5
    ho121  
       May 29, 2020 via Android
    有,如果 foo 被多个线程调用的话
    duwan
        6
    duwan  
       May 29, 2020
    建议楼主再看看 JVM 内存模型。如果是局部变量会在栈里,没有线程问题。但是你这个 map 是在堆里面,多线程会有问题的
    resist
        7
    resist  
       May 29, 2020
    大胆写,哪有那么多线程
    0x1001
        8
    0x1001  
       May 29, 2020
    @duwan 正解
    zhout
        9
    zhout  
    OP
       May 29, 2020
    @duwan 疑惑是每次 new HashMap,重置了一下,还有安全问题嘛
    zhout
        10
    zhout  
    OP
       May 29, 2020
    @zsl199512101234 看到同事代码里有这种骚操作,,,我正好也不太懂,所以发帖问问
    zhout
        11
    zhout  
    OP
       May 29, 2020
    @Jacky23333 看到同事代码里有这种骚操作。。
    ChanKc
        12
    ChanKc  
       May 29, 2020 via Android
    TheCure
        13
    TheCure  
       May 29, 2020
    you
    yungo8
        14
    yungo8  
       May 29, 2020 via Android
    有线程安全问题,但不能说代码一定有问题,只是不好。你得看看实际使用情况,比如假如这是个单例 springmvc controller 那肯定不行,比如后续继续要使用 map 赋值,另外一个线程又把它变成 new Map
    zhout
        15
    zhout  
    OP
       Jun 1, 2020
    @yeqizhang 赞,这个回答很完美
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   781 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 21:37 · PVG 05:37 · LAX 14:37 · JFK 17:37
    ♥ Do have faith in what you're doing.