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
|