java中同一个类的2个不同实例调用该类的全局变量会有线程安全问题吗? 比如有个class A{}
1,有个classA{里面有个全局变量}2,另外有2个classB、C或是更多那么现在这样classA{//全局变量Mapmap=newHashMap();}外面很多非子...
1,有个class A{里面有个全局变量}
2,另外有2个class B 、C 或是更多
那么现在这样
class A {
//全局变量
Map map = new HashMap();
}
外面很多非子类对A中方法、变量等进行调用
// 非子类
class B {
A a = new A();
}
class C {
A a = new A();
}
问题1:以上2个类或是更多类似这样的非子类并发调用时候,对于全局变量map会有线程安全问题吗? 展开
2,另外有2个class B 、C 或是更多
那么现在这样
class A {
//全局变量
Map map = new HashMap();
}
外面很多非子类对A中方法、变量等进行调用
// 非子类
class B {
A a = new A();
}
class C {
A a = new A();
}
问题1:以上2个类或是更多类似这样的非子类并发调用时候,对于全局变量map会有线程安全问题吗? 展开
3个回答
展开全部
你定义的map不是真正意义上的全局变量,是类内私有变量,每个类的对象都有自已的map对象,所以不会有线程安全问题
如果你定义的map是类的静态变量,这种情况下所有的类对象共享一个map,则在同时读写的时候会有线程安全问题
如果你定义的map是类的静态变量,这种情况下所有的类对象共享一个map,则在同时读写的时候会有线程安全问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
HashMap是非线程安全的类,可能会调用的过期的值, 建议使用Hashtable 就可避免这个问题
更多追问追答
追问
什么叫调用过期的值呢?你是说这样呢 Map map = new Hashtable();还是这样Hashtable table = new Hashtable();呢?
追答
失效值是由于线程不同步,在某进行调用时,其真实值已被其他进程修改造成的
Hashtable不是Map接口的类 ,这样创建即可Hashtable t = new Hashtable();
你可以看到, 他的方法都是线程同步的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会有线程安全问题,会为每个A类实例产生一个Map属性,互不干扰
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询