【发布时间】:2015-09-29 06:56:34
【问题描述】:
我有一个包含静态方法和单例类的代码示例
//code with static methods
public class DataManager{
public static Object getDataObject(){
HashMap map = new HashMap();
//Some processing in collections
//retrieval of data
}
public static void writeData(Object o){
HashMap map = new HashMap();
//Some processing in collections
//writing data
}
}
//code with singleton
public class DataManager{
private static DataManager instance;
private DataManager(){
}
public static DataManager getInstance(){
if(instance == null){
synchronized(DataManager.class){
if(instance == null){
instance = new DataManager();
}
}
}
return instance;
}
public Object getDataObject(){
HashMap map = new HashMap();
//Some processing in collections
//retrieval of data
}
public writeData(Object o){
HashMap map = new HashMap();
//Some processing in collections
//writing data
}
}
这是最好的使用方式。 当 2 个线程调用我的方法之一时会发生什么?在处理集合时,我的数据是否会损坏?静态方法分配了公共内存,所以当2个线程调用一个静态方法时会相互影响吗?在单例中只创建一个实例,如果 2 个线程用一个实例调用一个方法,它会相互影响吗?请帮助理解这一点。谢谢...
【问题讨论】:
-
坦率地说,你需要用谷歌搜索一下。多线程不能这样解释
-
@Lathy 所以地图对象是共享的,那么当 2 个线程使用这个地图时,数据可能会损坏。对吗?
标签: java concurrency singleton static-methods singleton-methods