这是我的班级:
public class OnlineDataProcessor implements Runnable
{
private final Map<String, VehicleData> recentDataMapping = new HashMap<String,VehicleData>();
public void run()
{
//Here i collect data from database and create objects VehicleData and put them in recentDataMapping.
}
public String toXML(String vehicleId)
{
//Here i take VehicleData object from recentDataMapping and work with it.
}
}
然后在系统启动时我有这个:
OnlineDataProcessor onlineDataProcessor = new OnlineDataProcessor();
Thread a = new Thread(onlineDataProcessor);
a.start();
然后基于servlet请求,我有这个代码:
String vehicleId = request.getParameter("vehicleId");
String str = onlineDataProcessor.toXML(vehicleId);
所以问题是......
我是否需要同步访问run()和toXML()方法中的 recentDataMapping 和 VehicleData 对象?
答案 0 :(得分:1)
@Alex的答案不正确(由于低代表不能拒绝投票)。使地图变得不稳定在这里无济于事。您需要在同一监视器上同步对地图的读取和写入,或使用ConcurrentHashMap
(假设您使用的是Java5或更高版本)
答案 1 :(得分:1)
由于您没有使用ConcurrentHashMap,因此应该同步对地图的任何访问,因为它是共享资源。您只需要将实际添加内容同步到地图中 - 所有其他工作都可以在同步部分之外完成。
如果您只想确保代码是线程安全的,请使用ConcurrentHasMap。