0

这是我的课:

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() 方法中的recentDataMappingVehicleData对象的访问?

4

2 回答 2

1

@Alex 的回答是不正确的(因为低代表不能投反对票)。使地图易变在这里无济于事。您需要在同一监视器上同步读取和写入地图,或者使用ConcurrentHashMap(假设您使用的是 Java5 或更高版本)

于 2013-07-06T23:29:40.917 回答
1

由于您没有使用 ConcurrentHashMap,因此对地图的任何访问都应同步,因为它是共享资源。您只需要将该实际添加同步到地图中 - 所有其他工作都可以在同步部分之外完成。

如果您只想确保代码是线程安全的,请使用 ConcurrentHasMap。

于 2013-07-06T23:30:01.440 回答