public class Demo { Map<Object,Object> map; public void foo(){ map = new HashMap<>(); } }
![]() | 1 zhout OP 额,补充一下,单机多线程的环境下。 |
![]() | 2 zsl199512101234 2020-05-29 17:00:35 +08:00 为啥要这样做呢 |
3 duwan 2020-05-29 17:01:10 +08:00 跟在哪初始化有什么关系?又不是局部变量 |
![]() | 4 Jacky23333 2020-05-29 17:02:20 +08:00 via Android 不是很明白你的目的是什么,是要实现单例模式吗?如果是的话那当然是线程不安全的,你需要考虑多个线程同时调用这个方法会怎样 |
5 ho121 2020-05-29 17:02:51 +08:00 via Android 有,如果 foo 被多个线程调用的话 |
6 duwan 2020-05-29 17:04:45 +08:00 建议楼主再看看 JVM 内存模型。如果是局部变量会在栈里,没有线程问题。但是你这个 map 是在堆里面,多线程会有问题的 |
![]() | 7 resist 2020-05-29 17:06:42 +08:00 大胆写,哪有那么多线程 |
![]() | 10 zhout OP @zsl199512101234 看到同事代码里有这种骚操作,,,我正好也不太懂,所以发帖问问 |
![]() | 11 zhout OP @Jacky23333 看到同事代码里有这种骚操作。。 |
12 ChanKc 2020-05-29 17:24:45 +08:00 via Android 有 |
![]() | 13 TheCure 2020-05-29 17:55:55 +08:00 you |
14 yeqizhang 2020-05-29 18:02:21 +08:00 via Android 有线程安全问题,但不能说代码一定有问题,只是不好。你得看看实际使用情况,比如假如这是个单例 springmvc controller 那肯定不行,比如后续继续要使用 map 赋值,另外一个线程又把它变成 new Map |