【发布时间】:2013-05-29 19:39:54
【问题描述】:
这是一小段代码
public Map<String,Object> findTruckParts(Map<String,Object> output){
Map<String,Object>findPartsMap = null;
NewFooInstance newFooInstance = new NewFooInstance();
findPartsMap = PartBuilder.buildPartsOutputMap(output, outputMap);
newFooInstance.buildItem(findPartsMap);
return findPartsMap;
}
outputMap 是一个新的 hashMap,输出是一个带有一些备件信息的 hashmap。 buildItem 调用了一些在 findPartsMap 周围传递的其他私有方法。
public class NewFooInstance{
buildItem(Map<String,Object> partsMap){
checkPartsValidity(partsMap, fetchMapOfValidParts());
}
checkPartsValidity(Map<String,Object> partsMap,Map<String,Object> partsMap){
//partsMap = update partsMap with missing items fetched from list of valid parts
}
}
上面的线程安全吗?由于所有映射都是各自方法的本地映射,因此我的假设是这是线程安全的。
编辑:我稍微修改了方法。接收一张地图并返回另一张。所以,我的问题是,返回的这个映射是线程安全的吗?它是该方法的本地,因此我认为这将是线程安全的(如果此映射丢失其监视器,则没有其他线程进入将能够更改其值),但是,因为此映射正在其他类和其他方法中进行修改,此映射的这种方法局部性是否会跨越不同的类/方法并确保线程安全?
【问题讨论】:
-
所有单线程代码都是线程安全的。
-
@MarkoTopolnik,当然是 :) 我的问题是我发布的上述 sn-p 在多线程环境中是否是线程安全的?
-
@SotiriosDelimanolis 当然。并且对象被传递给不同的方法,在那里它被改变(只是没有声明),也将是线程安全的?
-
您对“多线程环境”到底有什么想法?其他线程闲逛,做他们的事情?您必须准确指出您所涉及的线程和位置。
-
关于您的一小段代码,我可以告诉您的一件事是,
= new HashMap<String,Ojbect>();部分毫无意义。你应该删除它。
标签: java multithreading concurrency thread-safety